Author: echatellier Date: 2010-12-16 17:45:33 +0100 (Thu, 16 Dec 2010) New Revision: 317 Url: http://nuiton.org/repositories/revision/nuiton-matrix/317 Log: Update panel viewer to use multiple unique matrix submatrix method Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixDimensionPanel.java trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixProxy.java Modified: trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixProxy.java =================================================================== --- trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixProxy.java 2010-12-16 16:06:06 UTC (rev 316) +++ trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixProxy.java 2010-12-16 16:45:33 UTC (rev 317) @@ -30,6 +30,7 @@ import java.util.List; import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.ObjectUtils; /** * Matrix proxy contains only dimension and semantics definition, but @@ -155,7 +156,7 @@ // la reduction doit se faire sur le meme nombre de dimension if (elems.length != dim.length) { - throw new IllegalArgumentException(String.format("Can't reduce matrix with different dimension count (expected: %d, got %d)", dim.length, elems.length)); + throw new IllegalArgumentException(String.format("Can't get sub matrix with different dimension count (expected: %d, got %d)", dim.length, elems.length)); } // recopie seulement des sous semantiques voulues @@ -177,5 +178,28 @@ matrixProvider.fillValues(subMatrix); return subMatrix; } - + + /* + * Idem, mais ne compare pas les valeurs. + */ + @Override + public boolean equals(MatrixND mat) { + boolean result = true; + // le nom doit être le même + result = result && getName().equals(mat.getName()); + + // les sémantiques doivent-être identique + for (int i = 0; result && i < getDimCount(); i++) { + String dimName1 = getDimensionName(i); + String dimName2 = mat.getDimensionName(i); + result = ObjectUtils.equals(dimName1, dimName2); + + List<?> sem1 = getSemantic(i); + List<?> sem2 = mat.getSemantic(i); + result = result && ObjectUtils.equals(sem1, sem2); + + } + + return result; + } } 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 2010-12-16 16:06:06 UTC (rev 316) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixDimensionPanel.java 2010-12-16 16:45:33 UTC (rev 317) @@ -194,9 +194,13 @@ protected MatrixND createAndReduce(MatrixND matrix) { - // Reduit la matrice en fonction des choix de l utilisateur - // dans les autres InfoItem recuperation des autres elements - // selectionnees. + if (log.isDebugEnabled()) { + log.debug("matrice avant submatrice : " + matrix); + } + + // la matrice doit être reduite avant tout et en une seule + // fois pour fonctionner avec des matrices réelles ou des proxy + int[][] dimIndices = new int[subPanelList.size()][]; for (int i = 0; i < subPanelList.size(); i++) { SubDimensionPanel subDimPanel = subPanelList.get(i); JList list = subDimPanel.getList(); @@ -208,18 +212,23 @@ indList = list.getSelectedIndices(); } - if (log.isDebugEnabled()) { - log.debug("matrice avant submatrice de la dim " + i + ": " + matrix); - } - if (0 < indList.length && indList.length < matrix.getDim(i)) { - matrix = matrix.getSubMatrix(i, indList); + dimIndices[i] = indList; } + } - if (log.isDebugEnabled()) { - log.debug("matrice apres submatrice de la dim " + i + ": " + matrix); - } + // reduction effective de la matrice + matrix = matrix.getSubMatrix(dimIndices); + if (log.isDebugEnabled()) { + log.debug("matrice apres submatrice : " + matrix); + } + + // Effectue la somme si l'utilisateur a selectionné l'option somme + // dans le panel + for (int i = 0; i < subPanelList.size(); i++) { + SubDimensionPanel subDimPanel = subPanelList.get(i); + if (subDimPanel.getSumStep() != 1) { // on somme matrix = matrix.sumOverDim(i, subDimPanel.getSumStep()); @@ -265,7 +274,7 @@ } // end semantics modification */ } - + if (log.isDebugEnabled()) { log.debug("matrice apres sum de la dim " + i + ": " + matrix); } Modified: trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java =================================================================== --- trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java 2010-12-16 16:06:06 UTC (rev 316) +++ trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java 2010-12-16 16:45:33 UTC (rev 317) @@ -34,6 +34,7 @@ import org.nuiton.math.matrix.MatrixFactory; import org.nuiton.math.matrix.MatrixHelper; import org.nuiton.math.matrix.MatrixND; +import org.nuiton.math.matrix.MatrixProvider; import org.nuiton.math.matrix.viewer.renderer.MatrixChartRenderer; import org.nuiton.math.matrix.viewer.renderer.MatrixInfoTableRenderer; @@ -48,7 +49,7 @@ */ public class MatrixViewerPanelTest { - protected MatrixND getTestMatrix() { + protected MatrixND getTestMatrix(boolean proxy) { List<String> years = new ArrayList<String>(); years.add("1999"); years.add("2000"); @@ -66,10 +67,21 @@ cities.add("Toulouse"); cities.add("Marseille"); - MatrixND matrix = MatrixFactory.getInstance().create("test matrix", new List<?>[] { years, cities }); - matrix.setDimensionNames(new String[] { "Years", "Cities"}); - MatrixHelper.fill(matrix, 10000.0); - matrix.setValue(0, 0, 1000); + MatrixND matrix = null; + if (proxy) { + matrix = MatrixFactory.getInstance().createProxy("test matrix", new List<?>[]{years, cities}, new String[]{"Years", "Cities"}, new MatrixProvider() { + @Override + public void fillValues(MatrixND matrix) { + MatrixHelper.fill(matrix, 10000.0); + matrix.setValue(0, 0, 1000); + } + }); + } + else { + matrix = MatrixFactory.getInstance().create("test matrix", new List<?>[]{years, cities}, new String[]{"Years", "Cities"}); + MatrixHelper.fill(matrix, 10000.0); + matrix.setValue(0, 0, 1000); + } return matrix; } @@ -81,7 +93,7 @@ JFrame frame = new JFrame(); MatrixViewerPanel panel = new MatrixViewerPanel(); - MatrixND testMatrix = getTestMatrix(); + MatrixND testMatrix = getTestMatrix(false); panel.addMatrix(testMatrix, testMatrix); panel.addMatrixRenderer(new MatrixInfoTableRenderer()); panel.addMatrixRenderer(new MatrixChartRenderer()); @@ -97,4 +109,29 @@ e.printStackTrace(); }*/ } + + /** + * Test d'un affichage simple, par defaut (cas avec un proxy). + */ + @Test + public void testViewerPanelProxy() { + JFrame frame = new JFrame(); + + MatrixViewerPanel panel = new MatrixViewerPanel(); + MatrixND testMatrix = getTestMatrix(true); + panel.addMatrix(testMatrix, testMatrix); + panel.addMatrixRenderer(new MatrixInfoTableRenderer()); + panel.addMatrixRenderer(new MatrixChartRenderer()); + frame.add(panel); + + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + + /*try { + Thread.sleep(60000); + } catch (InterruptedException e) { + e.printStackTrace(); + }*/ + } }