package demo49; import java.io.*; import java.text.*; import java.util.*; import java.awt.*; import javax.swing.*; import org.openswing.swing.message.receive.java.*; import org.openswing.swing.pivottable.aggregators.java.*; import org.openswing.swing.pivottable.client.*; import org.openswing.swing.pivottable.functions.java.*; import org.openswing.swing.pivottable.java.*; import org.openswing.swing.pivottable.server.*; import org.openswing.swing.pivottable.tablemodelreaders.server.*; import org.openswing.swing.util.dataconverters.java.*; import org.openswing.swing.client.*; import java.awt.event.*; /** * <p>Title: OpenSwing Framework</p> * <p>Description: Grid Frame</p> * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p> * <p> </p> * @author Mauro Carniel * @version 1.0 */ public class GridFrame extends JFrame { PivotTable pivotTable = new PivotTable(); JPanel buttonsPanel = new JPanel(); FlowLayout flowLayout1 = new FlowLayout(); ReloadButton reloadButton1 = new ReloadButton(); ExportButton exportButton1 = new ExportButton(); FilterButton filterButton1 = new FilterButton(); JToggleButton expRowButton = new JToggleButton("Expand/collapse row"); JToggleButton expColButton = new JToggleButton("Expand/collapse column"); public GridFrame() { // public GridFrame(ArrayList vos) { try { super.setDefaultCloseOperation(super.EXIT_ON_CLOSE); jbInit(); setSize(750,600); setTitle("Pivot Table for sales"); setDefaultCloseOperation(this.EXIT_ON_CLOSE); CSVFileReader reader = new CSVFileReader( new File("orders.txt"), new String[]{ "orderDate", "category", "subCategory", "country", "region", "agent", "item", "sellQty", "sellAmount" }, new DataConverter[]{ new StringToDateConverter(new SimpleDateFormat("dd/MM/yyyy")), new DataConverter(), new DataConverter(), new DataConverter(), new DataConverter(), new DataConverter(), new DataConverter(), new StringToDoubleConverter(), new StringToDoubleConverter() } ); // TableModelReader reader = new TableModelReader( // vos, // new String[]{"category","subCategory","item","sellQty","sellAmount","orderDate"} // ); final PivotTableEngine engine = new PivotTableEngine(reader); pivotTable.setController(new PivotTableController(){ public Response getPivotTableModel(PivotTableParameters pars) { long t = System.currentTimeMillis(); Response res = engine.getPivotTableModel(pars); System.out.println("Analysis time: "+(System.currentTimeMillis()-t)+"ms"); return res; } }); RowField rowFieldCategory = new RowField("category",100); RowField rowFieldSubCategory = new RowField("subCategory",100); RowField rowFieldItem = new RowField("item",100); RowField rowFieldAgent = new RowField("agent",150); RowField rowFieldCountry = new RowField("country",100); RowField rowFieldRegion = new RowField("region",100); pivotTable.getAllRowFields().add(rowFieldCategory); pivotTable.getAllRowFields().add(rowFieldSubCategory); pivotTable.getAllRowFields().add(rowFieldItem); pivotTable.getAllRowFields().add(rowFieldAgent); pivotTable.getAllRowFields().add(rowFieldCountry); pivotTable.getAllRowFields().add(rowFieldRegion); pivotTable.addRowField(rowFieldCategory); pivotTable.addRowField(rowFieldSubCategory); pivotTable.addRowField(rowFieldItem); ColumnField columnFieldYear = new ColumnField("orderDate","year",new YearAggregator()); ColumnField columnFieldQuarter = new ColumnField("orderDate","quarter",new QuarterAggregator()); ColumnField columnFieldAgent = new ColumnField("agent"); ColumnField columnFieldCountry = new ColumnField("country"); ColumnField columnFieldRegion = new ColumnField("region"); pivotTable.getAllColumnFields().add(columnFieldYear); pivotTable.getAllColumnFields().add(columnFieldQuarter); pivotTable.getAllColumnFields().add(columnFieldAgent); pivotTable.getAllColumnFields().add(columnFieldCountry); pivotTable.getAllColumnFields().add(columnFieldRegion); pivotTable.addColumnField(columnFieldYear); pivotTable.addColumnField(columnFieldQuarter); DataField dataFieldSellQty = new DataField("sellQty",50,"sellQty",new SumFunction()); // sum function... NumberFormat nf = NumberFormat.getCurrencyInstance(); nf.setCurrency(Currency.getInstance(Locale.ITALY)); nf.setMaximumFractionDigits(2); nf.setMinimumFractionDigits(2); nf.setGroupingUsed(true); DataField dataFieldSellAmount = new DataField("sellAmount",80,"sells",new SumFunction()); // sum function... dataFieldSellAmount.setFormatter(nf); pivotTable.getAllDataFields().add(dataFieldSellQty); pivotTable.getAllDataFields().add(dataFieldSellAmount); pivotTable.addDataField(dataFieldSellQty); pivotTable.addDataField(dataFieldSellAmount); pivotTable.setDataFieldRenderer(new DataFieldRenderer() { /** * @param currentColor current color to set * @param rowPath GenericNodeKey row fields path that identify current row * @param colPath GenericNodeKey column fields path that identify current column * @param value value to show in the specified cell * @param row current row * @param col current column * @return Color background color to set */ public Color getBackgroundColor(Color currentColor,GenericNodeKey rowPath,GenericNodeKey colPath,Object value,int row,int col) { if (rowPath.getPath().length<pivotTable.getPivotTableParameters().getRowFields().size() || colPath.getPath().length<pivotTable.getPivotTableParameters().getColumnFields().size()+1) { int c = 200+rowPath.getPath().length*colPath.getPath().length*5; return new Color(c,c,c); } return currentColor; } /** * @param currentColor current color to set * @param rowPath GenericNodeKey row fields path that identify current row * @param colPath GenericNodeKey column fields path that identify current column * @param value value to show in the specified cell * @param row current row * @param col current column * @return Color foreground color to set */ public Color getForegroundColor(Color currentColor,GenericNodeKey rowPath,GenericNodeKey colPath,Object value,int row,int col) { return currentColor; } /** * @param currentFont current font to set * @param rowPath GenericNodeKey row fields path that identify current row * @param colPath GenericNodeKey column fields path that identify current column * @param value value to show in the specified cell * @param row current row * @param col current column * @return font to set */ public Font getFont(Font currentFont,GenericNodeKey rowPath,GenericNodeKey colPath,Object value,int row,int col) { if (rowPath.getPath().length<pivotTable.getPivotTableParameters().getRowFields().size() || colPath.getPath().length<pivotTable.getPivotTableParameters().getColumnFields().size()+1) return new Font(currentFont.getFontName(),Font.BOLD,currentFont.getSize()); return currentFont; } }); setVisible(true); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { buttonsPanel.setLayout(flowLayout1); flowLayout1.setAlignment(FlowLayout.LEFT); pivotTable.setExportButton(exportButton1); pivotTable.setFilterButton(filterButton1); pivotTable.setReloadButton(reloadButton1); expRowButton.addActionListener(new GridFrame_expRowButton_actionAdapter(this)); expColButton.addActionListener(new GridFrame_expColButton_actionAdapter(this)); this.getContentPane().add(pivotTable, BorderLayout.CENTER); this.getContentPane().add(buttonsPanel, BorderLayout.NORTH); buttonsPanel.add(reloadButton1, null); buttonsPanel.add(exportButton1, null); buttonsPanel.add(filterButton1, null); buttonsPanel.add(expRowButton, null); buttonsPanel.add(expColButton, null); } void expRowButton_actionPerformed(ActionEvent e) { if (pivotTable.getSelectedRow()==-1) return; if (expRowButton.isSelected()) pivotTable.expandRow(pivotTable.getSelectedRow()); else pivotTable.collapseRow(pivotTable.getSelectedRow()); } void expColButton_actionPerformed(ActionEvent e) { if (pivotTable.getSelectedColumn()==-1) return; if (expColButton.isSelected()) pivotTable.expandColumn(pivotTable.getSelectedColumn()); else pivotTable.collapseColumn(pivotTable.getSelectedColumn()); } } class GridFrame_expRowButton_actionAdapter implements java.awt.event.ActionListener { GridFrame adaptee; GridFrame_expRowButton_actionAdapter(GridFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.expRowButton_actionPerformed(e); } } class GridFrame_expColButton_actionAdapter implements java.awt.event.ActionListener { GridFrame adaptee; GridFrame_expColButton_actionAdapter(GridFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.expColButton_actionPerformed(e); } }