Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this file,
   * You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  package pt.webdetails.cda.exporter;
  
  import java.io.File;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
 import  org.apache.commons.io.IOUtils;
 import  org.apache.commons.logging.Log;
 import  org.apache.commons.logging.LogFactory;
 import  org.pentaho.di.core.exception.KettleException;
 import  org.pentaho.di.core.util.StringUtil;
 
 import  plugins.org.pentaho.di.robochef.kettle.DynamicTransConfig;
 import  plugins.org.pentaho.di.robochef.kettle.DynamicTransMetaConfig;
 import  plugins.org.pentaho.di.robochef.kettle.DynamicTransformation;
 import  plugins.org.pentaho.di.robochef.kettle.RowProductionManager;
 import  plugins.org.pentaho.di.robochef.kettle.TableModelInput;

Generic Kettle class to handle exports User: pedro Date: Mar 12, 2010 Time: 3:01:27 PM
 
 public abstract class AbstractKettleExporter extends AbstractExporter implements Exporter, RowProductionManager
 {
 
   private static final Log logger = LogFactory.getLog(AbstractKettleExporter.class);
   
   public static final String ATTACHMENT_NAME_SETTING = "attachmentName";
   public static final String COLUMN_HEADERS_SETTING = "columnHeaders";
   public static final String FILE_EXTENSION_SETTING = "fileExtension";
 
   protected ExecutorService executorService = Executors.newCachedThreadPool();
   protected Map<StringStringextraSettings;
   
   private SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmssZ");
   private String filename;
   
   private static long DEFAULT_ROW_PRODUCTION_TIMEOUT = 120;
 
   
   protected AbstractKettleExporter(Map<StringStringextraSettings)
   {
     this. = extraSettings;
   }
   
   
   protected abstract String getExportStepDefinition(String name);
 
   
   protected abstract String getType();
   
 
   public void startRowProduction()
   {
     String timeoutStr = CdaBoot.getInstance().getGlobalConfig().getConfigProperty("pt.webdetails.cda.DefaultRowProductionTimeout");
     long timeout = StringUtil.isEmpty(timeoutStr)?  : Long.parseLong(timeoutStr);
     String unitStr = CdaBoot.getInstance().getGlobalConfig().getConfigProperty("pt.webdetails.cda.DefaultRowProductionTimeoutTimeUnit");
     TimeUnit unit = StringUtil.isEmpty(unitStr)?  : TimeUnit.valueOf(unitStr);
     startRowProduction(timeoutunit);
   }
 
 
   public void startRowProduction(long timeoutTimeUnit unit)
   {
     try
     {
       List<Future<Boolean>> results = .invokeAll(timeoutunit);
       for (Future<Booleanresult : results)
       {
         result.get();
       }
     }
     catch (InterruptedException e)
     {
      .error(e);
    }
    catch (ExecutionException e)
    {
      .error(e);
    }
  }
  public void export(final OutputStream outfinal TableModel tableModelthrows ExporterException
  {
    TableModel output = null;
    try
    {
      final DynamicTransMetaConfig transMetaConfig = new DynamicTransMetaConfig(DynamicTransMetaConfig.Type.EMPTY, "Exporter"nullnull);
      final DynamicTransConfig transConfig = new DynamicTransConfig();
      transConfig.addConfigEntry(DynamicTransConfig.EntryType.STEP, "input""<step><name>input</name><type>Injector</type><copies>1</copies></step>");
      transConfig.addConfigEntry(DynamicTransConfig.EntryType.STEP, "export"getExportStepDefinition("export"));
      transConfig.addConfigEntry(DynamicTransConfig.EntryType.HOP, "input""export");
      TableModelInput input = new TableModelInput();
      transConfig.addInput("input"input);
      .add(input.getCallableRowProducer(tableModeltrue));
      RowMetaToTableModel outputListener = new RowMetaToTableModel(falsetruefalse);
      transConfig.addOutput("export"outputListener);
      DynamicTransformation trans = new DynamicTransformation(transConfigtransMetaConfig);
      trans.executeCheckedSuccess(nullnullthis);
      .info(trans.getReadWriteThroughput());
      // Transformation executed ok, let's return the file
      copyFileToOutputStream(out);
      output = outputListener.getRowsWritten();
      if(output != null){
        .debug(output.getRowCount() + " rows written.");
      }
    }
    catch (KettleException e)
    {
      throw new ExporterException("Kettle exception during " + getType() + " query "e);
    }
    catch (Exception e)
    {
      throw new ExporterException("Unknown exception during " + getType() + " query "e);
    }
  }
  protected String getFileName()
  {
     = "pentaho-cda-" + getType() + "-" + .format(Calendar.getInstance().getTime()) + "-" + UUID.randomUUID().toString();
    return ;
  }
  
  protected  String getSetting(String nameString defaultValue){
    return getSetting(namedefaultValue);
  }
  
  protected  String getSetting(Map<StringStringsettingsString nameString defaultValue){
    if(settings.containsKey(name)) {
      return settings.get(name);
    }
    return defaultValue;
  }
  private void copyFileToOutputStream(OutputStream osthrows IOException
  {
    
    File file = new File(System.getProperty("java.io.tmpdir") + . +  + "." + getType());
    FileInputStream is = new FileInputStream(file);
    try{
      IOUtils.copy(isos);
    } 
    finally {
      IOUtils.closeQuietly(is);
    }
    // temp file not needed anymore - delete it
    file.delete();
  }
New to GrepCode? Check out our FAQ X