Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package pt.webdetails.cda;
  
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  
 import  org.apache.commons.logging.Log;
 import  org.apache.commons.logging.LogFactory;
 import  org.pentaho.commons.connection.IPentahoResultSet;
 import  org.pentaho.commons.connection.memory.MemoryMetaData;
 import  org.pentaho.commons.connection.memory.MemoryResultSet;
 import  org.pentaho.platform.api.engine.IPentahoSession;
 import  org.pentaho.platform.engine.core.system.PentahoSessionHolder;
 import  org.pentaho.reporting.libraries.base.util.CSVTokenizer;
 
 
This is a CDA Pojo Component that can be used in XActions or anywhere else.

Author(s):
Will Gorman (wgorman@pentaho.com)
 
 public class CdaQueryComponent {
 
   private static final Log log = LogFactory.getLog(CdaQueryComponent.class);
   private static final int DEFAULT_PAGE_SIZE = 20;
   private static final int DEFAULT_START_PAGE = 0;
   
   IPentahoResultSet resultSet = null;
   String file = null;
   Map<StringObjectinputs = new HashMap<StringObject>();
   
   public void setFile(String file) {
     this. = file;
   }
   
   public void setInputs(Map<StringObjectinputs) {
     this. = inputs;
   }
 
   public boolean validate() throws Exception {
     if ( == null) {
       .error("File not set"); //$NON-NLS-1$
       return false;
     }
     // verify file exists
     
     return true;
   }
 
   private int inputsGetInteger(String nameint defaultVal)
   {
     Object obj = .get(name);
     
     // pojo component forces all strings to upper case :-(
     if (obj == null)
     {
       obj = .get(name.toUpperCase());
     }
     
     if (obj == null)
     {
       return defaultVal;
     }
     
     return new Integer(obj.toString());
   }
 
   private long inputsGetLong(String namelong defaultVal) {
       Object obj = .get(name);
       // pojo component forces all strings to upper case :-(
       if (obj == null) {
         obj = .get(name.toUpperCase());
       }
       if (obj == null) {
         return defaultVal;
       }
       return new Long(obj.toString());
   }
   
   private String inputsGetString(String nameString defaultVal) {
     Object obj = .get(name);
     // pojo component forces all strings to upper case :-(
     if (obj == null) {
       obj = .get(name.toUpperCase());
     }
     if (obj == null) {
       return defaultVal;
     }
     return obj.toString();
   }
  
  public boolean execute() throws Exception {
    final QueryOptions queryOptions = new QueryOptions();
    final CdaSettings cdaSettings = SettingsManager.getInstance().parseSettingsFile();
    
    final String CDA_PARAMS = "cdaParameterString";
    final String CDA_PARAM_SEPARATOR = ";";
    // page info
    
    final long pageSize = inputsGetLong("pageSize", 0);
    final long pageStart = inputsGetLong("pageStart", 0);
    final boolean paginate = "true".equals(inputsGetString("paginateQuery""false"));
    if (pageSize > 0 || pageStart > 0 || paginate) {
      if (pageSize > . || pageStart > .) {
        throw new ArithmeticException("Paging values too large");
      }
      queryOptions.setPaginate(true);
      queryOptions.setPageSize(pageSize > 0 ? (intpageSize : paginate ?  : 0);
      queryOptions.setPageStart(pageStart > 0 ? (intpageStart : paginate ?  : 0);
    }
    // query info 
    
    queryOptions.setOutputType(inputsGetString("outputType""resultset"));
    queryOptions.setDataAccessId(inputsGetString("dataAccessId""<blank>"));
    queryOptions.setOutputIndexId(inputsGetInteger("outputIndexId", 1));
    
    // params and settings
    
    //process parameter string "name1=value1;name2=value2"
    String cdaParamString = inputsGetString(CDA_PARAMSnull);
    if (cdaParamString != null && cdaParamString.trim().length() > 0) {
      
      List<StringcdaParams = new ArrayList<String>();
      //split to 'name=val' tokens
      CSVTokenizer tokenizer = new CSVTokenizer(cdaParamStringCDA_PARAM_SEPARATOR);
      while(tokenizer.hasMoreTokens()){
        cdaParams.add(tokenizer.nextToken());
      }
      
      //split '='
      for(String nameValue : cdaParams){
        int i = 0;
        CSVTokenizer nameValSeparator = new CSVTokenizer(nameValue"=");
        String name=nullvalue=null;
        while(nameValSeparator.hasMoreTokens()){
          if(i++ == 0){
            name = nameValSeparator.nextToken();
          }
          else {
            value = nameValSeparator.nextToken();
            break;
          }
        }
        if(name != nullqueryOptions.addParameter(namevalue);
      }
    }
    
	for (String param : .keySet()) {
      if (param.startsWith("param")) {
        queryOptions.addParameter(param.substring(5), inputsGetString(param""));
      } else if (param.startsWith("setting")) {
        queryOptions.addSetting(param.substring(7), inputsGetString(param""));
      }
    }
      // TODO: Support binary outputs if outputtype not equals resultset
    if (queryOptions.getOutputType().equals("resultset")) {
      TableModel tableModel = cdaSettings.getDataAccess(queryOptions.getDataAccessId()).doQuery(queryOptions);
       = convertTableToResultSet(tableModel);
    } 
    
    return true;
  }
  
  private IPentahoResultSet convertTableToResultSet(TableModel tableModel) {
    List<StringcolumnNames = new ArrayList<String>();
    for (int i = 0; i < tableModel.getColumnCount(); i++) {
      columnNames.add(tableModel.getColumnName(i));
    }
    MemoryMetaData metadata = new MemoryMetaData(columnNames);
    
    MemoryResultSet resultSet = new MemoryResultSet();
    resultSet.setMetaData(metadata);
    for (int i = 0; i < tableModel.getRowCount(); i++) {
      Object row[] = new Object[tableModel.getColumnCount()];
      for (int j = 0; j < tableModel.getColumnCount(); j++) {
        row[j] = tableModel.getValueAt(ij);
      }
      resultSet.addRow(row);
    }
    return resultSet;
  }
  
  public IPentahoResultSet getResultSet() {
    return ;
  }
New to GrepCode? Check out our FAQ X