Author: echatellier Date: 2011-04-08 16:03:40 +0200 (Fri, 08 Apr 2011) New Revision: 348 Url: http://nuiton.org/repositories/revision/nuiton-matrix/348 Log: #1448: Update MatrixFilter to support dimension filter Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixDimensionPanel.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixFilter.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixInfoTableRenderer.java trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixDimensionPanel.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixDimensionPanel.java 2011-04-08 13:10:03 UTC (rev 347) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixDimensionPanel.java 2011-04-08 14:03:40 UTC (rev 348) @@ -27,6 +27,8 @@ import static org.nuiton.i18n.I18n._; +import org.apache.commons.lang.StringUtils; + import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; @@ -103,8 +105,8 @@ repaint(); } - public MatrixND getModifiedMatrix() { - MatrixND reducedMatrix = createAndReduce(matrix); + public MatrixND getModifiedMatrix(List<MatrixFilter> matrixFilters) { + MatrixND reducedMatrix = createAndReduce(matrix, matrixFilters); return reducedMatrix; } @@ -141,6 +143,9 @@ * tous les boutons (methode setSelected surchargée). */ protected ButtonGroup buttonGroup = new ButtonGroup() { + /** serialVersionUID. */ + private static final long serialVersionUID = 8214289174634749701L; + @Override public void setSelected(ButtonModel m, boolean b) { if (b) { @@ -245,7 +250,14 @@ if (matrix != null) { int index = 0; for (List<?> semantic : matrix.getSemantics()) { - SubDimensionPanel dimPanel = new SubDimensionPanel(index, _(matrix.getDimensionName(index)), semantic); + + // compute dimension name + String dimensionName = _(matrix.getDimensionName(index)); + if (StringUtils.isBlank(dimensionName)) { + dimensionName = _("nuitonmatrix.viewer.dimnameindex", index); + } + + SubDimensionPanel dimPanel = new SubDimensionPanel(index, dimensionName, semantic); add(dimPanel); subPanelList.add(dimPanel); index++; @@ -275,10 +287,18 @@ } } - protected MatrixND createAndReduce(MatrixND matrix) { + /** + * Reduit, somme et filtre la matrice sur les dimensions selectionnés, + * les boutons d'action selections et les filtres enregistrés. + * + * @param matrix initial matrix to reduce + * @param matrixFilters matrix filter to apply + * @return filtred, reduced and sommed matrix + */ + protected MatrixND createAndReduce(MatrixND matrix, List<MatrixFilter> matrixFilters) { if (log.isDebugEnabled()) { - log.debug("matrice avant submatrice : " + matrix); + log.debug("Matrice before submatrix : " + matrix); } // la matrice doit être reduite avant tout et en une seule @@ -304,7 +324,7 @@ matrix = matrix.getSubMatrix(dimIndices); if (log.isDebugEnabled()) { - log.debug("matrice apres submatrice : " + matrix); + log.debug("Matrix after submatrix : " + matrix); } // Effectue la somme si l'utilisateur a selectionné l'option somme @@ -322,49 +342,22 @@ // c une somme partielle String name = matrix.getDimensionName(i) + " " + _("nuitonmatrix.viewer.sum"); - /* FIXME echatellier somme par autre interval que -1 - //si c une somme pour les annees, on change l'intitule - if (item instanceof InfoItemDate){ - name = _ ("isisfish.common.year"); - }*/ - matrix.setDimensionName(i, name); } - /* FIXME echatellier somme par autre interval que -1 - // #1905 : modifie les semantiques de type Date pour que lorsque - // c'est par exemple une somme par année - // les semantique se nomment - // janvier 0, janvier 1... - // plutot que - // janvier 0, fevrier 0... - Object sem = matrix.getSemantics(i); - if (sem instanceof List) { - List<Object> semList = (List<Object>)sem; - List<Object> newList = new ArrayList<Object>(); - for (int index = 0 ; index < semList.size(); ++index) { - Object semObject = semList.get(index); - if (semObject instanceof Date) { - Date semDate = (Date)semObject; - Date newDate = new Date(semDate.getDate() * item.getSumStep()); - newList.add(newDate); - } - else { - newList.add(semObject); - } - } - matrix.setSemantics(i, newList); + // apply main filter after reduction + for (MatrixFilter matrixFilter : matrixFilters) { + matrix = matrixFilter.filterDimension(matrix, i, subDimPanel.getSumStep()); } - // end semantics modification */ } if (log.isDebugEnabled()) { - log.debug("matrice apres sum de la dim " + i + ": " + matrix); + log.debug("Matrix after sum on dim " + i + ": " + matrix); } } if (log.isDebugEnabled()) { - log.debug("Matrice avant le reduce: " + matrix); + log.debug("Matrix febore reduce: " + matrix); } // arrive ici on a une matrice qui a des tailles de dimension 1 @@ -374,6 +367,11 @@ // reduction de la matrice MatrixND result = matrix.reduce(2); + // apply main filter after reduction + for (MatrixFilter matrixFilter : matrixFilters) { + result = matrixFilter.filter(result); + } + return result; } } Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixFilter.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixFilter.java 2011-04-08 13:10:03 UTC (rev 347) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixFilter.java 2011-04-08 14:03:40 UTC (rev 348) @@ -41,8 +41,22 @@ /** * Filter input matrix. * + * Called after submatrix creation on selected dimension and applied sum action. + * + * This method can be considerer as "main filter". + * * @param matrix matrix to filter * @return filtered matrix */ public MatrixND filter(MatrixND matrix); + + /** + * Apply filter on matrix after dimension summing. + * + * @param matrix matrix to filter + * @param dim dimension concerned by summing + * @param sumStep sumStep summing + * @return filtered matrix + */ + public MatrixND filterDimension(MatrixND matrix, int dim, int sumStep); } Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java 2011-04-08 13:10:03 UTC (rev 347) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java 2011-04-08 14:03:40 UTC (rev 348) @@ -300,10 +300,8 @@ String actionCommand = e.getActionCommand(); if ("render".equals(actionCommand)) { - // get matrix to display - MatrixND matrix = dimensionPanel.getModifiedMatrix(); - // filter matrix - matrix = getFilteredMatrix(matrix); + // get matrix to display filtered + MatrixND matrix = dimensionPanel.getModifiedMatrix(matrixFilters); // matrice superieur a 2 dimensions non geree!! if (matrix.getDimCount() > 2) { Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixInfoTableRenderer.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixInfoTableRenderer.java 2011-04-08 13:10:03 UTC (rev 347) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixInfoTableRenderer.java 2011-04-08 14:03:40 UTC (rev 348) @@ -27,14 +27,27 @@ import static org.nuiton.i18n.I18n._; +import java.awt.BorderLayout; import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixND; import org.nuiton.math.matrix.viewer.MatrixRenderer; +import org.nuiton.util.FileUtil; import org.nuiton.util.Resource; /** @@ -46,17 +59,39 @@ * Last update : $Date$ * By : $Author$ */ -public class MatrixInfoTableRenderer implements MatrixRenderer { +public class MatrixInfoTableRenderer implements MatrixRenderer, ActionListener { + /** Class logger. */ + private static Log log = LogFactory.getLog(MatrixInfoTableRenderer.class); + + protected MatrixND matrix; + /* * @see org.nuiton.math.matrix.viewer.MatrixRenderer#getPanel(org.nuiton.math.matrix.MatrixND) */ @Override public Component getComponent(MatrixND matrix) { + this.matrix = matrix; + JPanel panel = new JPanel(new BorderLayout()); + + // label matrix name + JLabel nameLabel = new JLabel(_(matrix.getName())); + nameLabel.setHorizontalAlignment(JLabel.CENTER); + panel.add(nameLabel, BorderLayout.NORTH); + + // data table JTable table = new JTable(); table.setModel(new MatrixInfoTableModel(matrix)); - return new JScrollPane(table); + panel.add(new JScrollPane(table), BorderLayout.CENTER); + + // export button + JButton exportButton = new JButton(_("nuitonmatrix.viewer.renderer.exportascsv")); + exportButton.addActionListener(this); + exportButton.setActionCommand("exportascsv"); + exportButton.setEnabled(this.matrix != null); + panel.add(exportButton, BorderLayout.SOUTH); + return panel; } /* @@ -75,5 +110,33 @@ return _("nuitonmatrix.viewer.renderer.data"); } - + /* + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + @Override + public void actionPerformed(ActionEvent e) { + + if ("exportascsv".equals(e.getActionCommand())) { + FileWriter writer = null; + try { + File file = FileUtil.getFile(".+\\.csv", "CSV file"); + if (file != null) { + + // add csv extension + if (!file.getName().endsWith(".csv")) { + file = new File(file.getAbsolutePath() + ".csv"); + } + + writer = new FileWriter(file); + matrix.exportCSV(writer, true); + } + } catch (IOException eee) { + log.error(":104:Error during export" + eee); + } + finally { + IOUtils.closeQuietly(writer); + } + } + } + } Modified: trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties =================================================================== --- trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties 2011-04-08 13:10:03 UTC (rev 347) +++ trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties 2011-04-08 14:03:40 UTC (rev 348) @@ -17,6 +17,7 @@ nuitonmatrix.menu.csv.import.file=Import from file nuitonmatrix.menu.csv.import.position=Import at current position nuitonmatrix.menu.option.semantics=Export/Copy with semantics +nuitonmatrix.viewer.dimnameindex=Dimension %d nuitonmatrix.viewer.graphcomborender.bar=Verticals bar rendering nuitonmatrix.viewer.graphcomborender.bar.3d=3D verticals bars rendering nuitonmatrix.viewer.graphcomborender.bar.stacked=Stacked verticals bars rendering @@ -28,5 +29,6 @@ nuitonmatrix.viewer.matrix.more.2d=Matrix dimensions count over 2 \!\nChoose less elements or apply sum operator. nuitonmatrix.viewer.renderer.chart=Chart nuitonmatrix.viewer.renderer.data=Data +nuitonmatrix.viewer.renderer.exportascsv=Export as CSV nuitonmatrix.viewer.renderer.panel=Matrix nuitonmatrix.viewer.sum=Sum Modified: trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties =================================================================== --- trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties 2011-04-08 13:10:03 UTC (rev 347) +++ trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties 2011-04-08 14:03:40 UTC (rev 348) @@ -17,6 +17,7 @@ nuitonmatrix.menu.csv.import.file=Importer depuis un fichier nuitonmatrix.menu.csv.import.position=Importer \u00E0 la position courante nuitonmatrix.menu.option.semantics=Exporter/Copier avec la s\u00E9mantique +nuitonmatrix.viewer.dimnameindex=Dimension %d nuitonmatrix.viewer.graphcomborender.bar=Rendu en barres verticales nuitonmatrix.viewer.graphcomborender.bar.3d=Rendu en barres verticales 3D nuitonmatrix.viewer.graphcomborender.bar.stacked=Rendu en barres verticales empil\u00E9es @@ -28,5 +29,6 @@ nuitonmatrix.viewer.matrix.more.2d=Matrice de plus de 2 dimensions \!\nS\u00E9lectionnez moins d'\u00E9l\u00E9ments ou utilisez l'op\u00E9rateur somme. nuitonmatrix.viewer.renderer.chart=Graphique nuitonmatrix.viewer.renderer.data=Donn\u00E9es +nuitonmatrix.viewer.renderer.exportascsv=Exporter en CSV nuitonmatrix.viewer.renderer.panel=Matrice nuitonmatrix.viewer.sum=Somme