Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package pt.webdetails.cda.utils;
  
  import java.util.HashMap;
  
  import  org.apache.commons.logging.Log;
  import  org.apache.commons.logging.LogFactory;
 import  org.pentaho.reporting.engine.classic.core.util.TypedTableModel;
Utility class to handle TableModel operations

User: pedro Date: Feb 4, 2010 Time: 12:31:54 PM

 
 public class TableModelUtils
 {
 
   private static final Log logger = LogFactory.getLog(TableModelUtils.class);
   private static TableModelUtils _instance;
 
 
   public TableModelUtils()
   {
   }
 
 
   public TableModel postProcessTableModel(final DataAccess dataAccess,
           final QueryOptions queryOptions,
           final TableModel rawTableModelthrows TableModelExceptionSortExceptionInvalidOutputIndexException
   {
     
     if(rawTableModel == null){
       throw new IllegalArgumentException("Cannot process null table.");
     } else if (rawTableModel.getRowCount() == 0) {
       return rawTableModel;
     }
 
     // We will:
     //  1. Evaluate Calculated columns
     //  2. Show only the output columns we want;
     //  3. Sort
     //  3. Pagination
 
     // 1
     TableModel t;
     final ArrayList<ColumnDefinitioncolumnDefinitions = dataAccess.getCalculatedColumns();
     if (columnDefinitions.isEmpty())
     {
       t = rawTableModel;
     }
     else
     {
       t = new CalculatedTableModel(rawTableModelcolumnDefinitions.toArray(new ColumnDefinition[columnDefinitions.size()]));
     }
 
     // First we need to check if there's nothing to do.
     ArrayList<IntegeroutputIndexes = dataAccess.getOutputs(queryOptions.getOutputIndexId());
     if(outputIndexes == null) {
       throw new InvalidOutputIndexException("Invalid outputIndexId: " + queryOptions.getOutputIndexId(), null);
     }
     /*
     if (queryOptions.isPaginate() == false && outputIndexes.isEmpty() && queryOptions.getSortBy().isEmpty())
     {
     // No, the original one is good enough
     return t;
     }
      */
     // 2
     // If output mode == exclude, we need to translate the excluded outputColuns
     // into included ones
     if (dataAccess.getOutputMode(queryOptions.getOutputIndexId()) == .. && outputIndexes.size() > 0)
     {
 
       ArrayList<IntegernewOutputIndexes = new ArrayList<Integer>();
       for (int i = 0; i < t.getColumnCount(); i++)
       {
         if (!outputIndexes.contains(i))
         {
           newOutputIndexes.add(i);
         }
       }
       outputIndexes = newOutputIndexes;
     }
 
 
     final int columnCount = outputIndexes.size();
     if (columnCount != 0)
     {
      if ((Collections.max(outputIndexes) > t.getColumnCount() - 1))
      {
        throw new TableModelException("Output index higher than number of columns in tableModel"null);
      }
      final Class[] colTypes = new Class[columnCount];
      final String[] colNames = new String[columnCount];
      for (int i = 0; i < outputIndexes.size(); i++)
      {
        final int outputIndex = outputIndexes.get(i);
        colTypes[i] = t.getColumnClass(outputIndex);
        colNames[i] = t.getColumnName(outputIndex);
      }
      final int rowCount = t.getRowCount();
      .debug(rowCount == 0 ? "No data found" : "Found " + rowCount + " rows");
      final TypedTableModel typedTableModel = new TypedTableModel(colNamescolTypesrowCount);
      for (int r = 0; r < rowCountr++)
      {
        for (int j = 0; j < outputIndexes.size(); j++)
        {
          final int outputIndex = outputIndexes.get(j);
          typedTableModel.setValueAt(t.getValueAt(routputIndex), rj);
        }
      }
      t = typedTableModel;
    }
    // Now, handle sorting
    if (!queryOptions.getSortBy().isEmpty())
    {
      // no action
      t = (new SortTableModel()).doSort(tqueryOptions.getSortBy());
    }
    // Create a metadata-aware table model
    final Class[] colTypes = new Class[t.getColumnCount()];
    final String[] colNames = new String[t.getColumnCount()];
    for (int i = 0; i < t.getColumnCount(); i++)
    {
      colTypes[i] = t.getColumnClass(i);
      colNames[i] = t.getColumnName(i);
    }
    final int rowCount = t.getRowCount();
    MetadataTableModel result = new MetadataTableModel(colNamescolTypesrowCount);
    result.setMetadata("totalRows"rowCount);
    for (int r = 0; r < rowCountr++)
    {
      for (int j = 0; j < t.getColumnCount(); j++)
      {
        result.setValueAt(t.getValueAt(rj), rj);
      }
    }
    // Paginate
    return paginateTableModel(resultqueryOptions);
  }
  public TableModel copyTableModel(final DataAccess dataAccessfinal TableModel t)
  {
    // We're removing the ::table-by-index:: cols
    // Build an array of column indexes whose name is different from ::table-by-index::.*
    ArrayList<StringnamedColumns = new ArrayList<String>();
    ArrayList<ClassnamedColumnsClasses = new ArrayList<Class>();
    for (int i = 0; i < t.getColumnCount(); i++)
    {
      String colName = t.getColumnName(i);
      if (!colName.startsWith("::table-by-index::")
              && !colName.startsWith("::column::"))
      {
        namedColumns.add(colName);
        namedColumnsClasses.add(t.getColumnClass(i));
      }
    }
    final int count = namedColumns.size();
    final ArrayList<ColumnDefinitioncalculatedColumnsList = dataAccess.getCalculatedColumns();
    final Class[] colTypes = namedColumnsClasses.toArray(new Class[]
            {
            });
    final String[] colNames = namedColumns.toArray(new String[]
            {
            });
    for (int i = 0; i < counti++)
    {
      colTypes[i] = t.getColumnClass(i);
      final ColumnDefinition col = dataAccess.getColumnDefinition(i);
      colNames[i] = col != null ? col.getName() : t.getColumnName(i);
    }
    final int rowCount = t.getRowCount();
    .debug(rowCount == 0 ? "No data found" : "Found " + rowCount + " rows");
    final TypedTableModel typedTableModel = new TypedTableModel(colNamescolTypesrowCount);
    for (int r = 0; r < rowCountr++)
    {
      for (int c = 0; c < countc++)
      {
        typedTableModel.setValueAt(t.getValueAt(rc), rc);
      }
    }
    return typedTableModel;
  }
  {
    int rowCount = dataAccessMap.size();
    // Define names and types
    final String[] colNames =
    {
      "id""name""type"
    };
    final Class[] colTypes =
    {
      String.classString.classString.class
    };
    final TypedTableModel typedTableModel = new TypedTableModel(colNamescolTypesrowCount);
    for (DataAccess dataAccess : dataAccessMap.values())
    {
      if (dataAccess.getAccess() == ..)
      {
        typedTableModel.addRow(new Object[]
                {
                  dataAccess.getId(), dataAccess.getName(), dataAccess.getType()
                });
      }
    }
    return typedTableModel;
  }
  public static synchronized TableModelUtils getInstance()
  {
    if ( == null)
    {
       = new TableModelUtils();
    }
    return ;
  }
  {
    int rowCount = parameters.size();
    // Define names and types
    final String[] colNames =
    {
      "name""type""defaultValue""pattern""access"
    };
    final Class[] colTypes =
    {
      String.classString.classString.classString.classString.class
    };
    final TypedTableModel typedTableModel = new TypedTableModel(colNamescolTypesrowCount);
    for (Parameter p : parameters)
    {
      typedTableModel.addRow(new Object[]
              {
                p.getName(), p.getTypeAsString(), p.getDefaultValue(), p.getPattern(), p.getAccess().toString()
              });
    }
    return typedTableModel;
  }


  
Method to append a tablemodel into another. We'll make no guarantees about the types

Parameters:
tableModelA TableModel to be modified
tableModelB Contents to be appended #
  public TableModel appendTableModel(final TableModel tableModelAfinal TableModel tableModelB)
  {
    // We will believe the data is correct - no type checking
    int colCountA = tableModelA.getColumnCount(),
            colCountB = tableModelB.getColumnCount();
    boolean usingA = colCountA > colCountB;
    int colCount = usingA ? colCountA : colCountB;
    TableModel referenceTable = (usingAtableModelA : tableModelB);
    
    final Class[] colTypes = new Class[colCount];
    final String[] colNames = new String[colCount];
    for (int i = 0; i < referenceTable.getColumnCount(); i++)
    {
      colTypes[i] = referenceTable.getColumnClass(i);
      colNames[i] = referenceTable.getColumnName(i);
    }
    int rowCount = tableModelA.getRowCount() + tableModelB.getRowCount();
    // Table A
    final TypedTableModel typedTableModel = new TypedTableModel(colNamescolTypesrowCount);
    for (int r = 0; r < tableModelA.getRowCount(); r++)
    {
      for (int c = 0; c < colTypes.lengthc++)
      {
        typedTableModel.setValueAt(tableModelA.getValueAt(rc), rc);
      }
    }
    // Table B
    int rowCountOffset = tableModelA.getRowCount();
    for (int r = 0; r < tableModelB.getRowCount(); r++)
    {
      for (int c = 0; c < colTypes.lengthc++)
      {
        typedTableModel.setValueAt(tableModelB.getValueAt(rc), r + rowCountOffsetc);
      }
    }
    return typedTableModel;
  }
  {
    if (!queryOptions.isPaginate() || (queryOptions.getPageSize() == 0 && queryOptions.getPageStart() == 0))
    {
      return t;
    }
    final int rowCount = Math.min(queryOptions.getPageSize(), t.getRowCount() - queryOptions.getPageStart());
    .debug("Paginating " + queryOptions.getPageSize() + " pages from page " + queryOptions.getPageStart());
    final Class[] colTypes = new Class[t.getColumnCount()];
    final String[] colNames = new String[t.getColumnCount()];
    for (int i = 0; i < t.getColumnCount(); i++)
    {
      colTypes[i] = t.getColumnClass(i);
      colNames[i] = t.getColumnName(i);
    }
    final MetadataTableModel resultTableModel = new MetadataTableModel(colNamescolTypesrowCountt.getAllMetadata());
    resultTableModel.setMetadata("pageSize"queryOptions.getPageSize());
    resultTableModel.setMetadata("pageStart"queryOptions.getPageStart());
    for (int r = 0; r < rowCountr++)
    {
      for (int j = 0; j < t.getColumnCount(); j++)
      {
        resultTableModel.setValueAt(t.getValueAt(r + queryOptions.getPageStart(), j), rj);
      }
    }
    return resultTableModel;
  }
New to GrepCode? Check out our FAQ X