Revision: 9295
http://sourceforge.net/p/fudaa/svn/9295
Author: deniger
Date: 2016-02-24 23:33:36 +0000 (Wed, 24 Feb 2016)
Log Message:
-----------
CRUE-644
Modified Paths:
--------------
trunk/soft/fudaa-crue/ui-report/src/main/java/org/fudaa/fudaa/crue/report/longitudinal/ReportLongitudinalExportDataBuilder.java
Modified: trunk/soft/fudaa-crue/ui-report/src/main/java/org/fudaa/fudaa/crue/report/longitudinal/ReportLongitudinalExportDataBuilder.java
===================================================================
--- trunk/soft/fudaa-crue/ui-report/src/main/java/org/fudaa/fudaa/crue/report/longitudinal/ReportLongitudinalExportDataBuilder.java 2016-02-24 22:28:54 UTC (rev 9294)
+++ trunk/soft/fudaa-crue/ui-report/src/main/java/org/fudaa/fudaa/crue/report/longitudinal/ReportLongitudinalExportDataBuilder.java 2016-02-24 23:33:36 UTC (rev 9295)
@@ -5,24 +5,25 @@
import com.memoire.fu.FuEmptyArrays;
import gnu.trove.TIntObjectHashMap;
-import java.awt.color.ColorSpace;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
-import org.apache.commons.lang.StringUtils;
import org.fudaa.dodico.crue.metier.factory.CruePrefix;
import org.fudaa.ebli.courbe.EGAxeHorizontal;
import org.fudaa.ebli.courbe.EGCourbe;
import org.fudaa.ebli.courbe.EGExportData;
import org.fudaa.ebli.courbe.EGExportDataBuilder;
import org.fudaa.ctulu.table.CtuluTableCellDoubleValue;
+import org.fudaa.dodico.crue.common.BusinessMessages;
+import org.fudaa.dodico.crue.projet.report.data.ReportRunKey;
+import org.fudaa.dodico.crue.projet.report.data.ReportRunVariableTimeKey;
import org.fudaa.ebli.courbe.EGGraphe;
-import org.fudaa.ebli.courbe.EGModel;
import org.fudaa.ebli.courbe.EGTimeLabel;
-import org.fudaa.ebli.courbe.EgModelLabelNamed;
import org.fudaa.fudaa.crue.loi.common.LoiConstanteCourbeModel;
import org.openide.util.NbBundle;
@@ -43,85 +44,123 @@
protected static final int COLUMN_SECTION = 1;
protected static final int COLUMN_BRANCHE = 0;
- private double[] time_;
- private List<String> branches;
- private List<String> sections;
+// private double[] time_;
+// private List<String> branches;
+// private List<String> sections;
+ Data data = new Data();
+ static class ColumnData {
+
+ Class type;
+ String columnName;
+ List values = new ArrayList();
+ }
+
+ static class Data {
+
+ List<ColumnData> columns = new ArrayList<>();
+
+ ColumnData addColumn() {
+ ColumnData res = new ColumnData();
+ columns.add(res);
+ return res;
+ }
+ }
+
LongitudinalExportData(final EGCourbe[] _cs, final EGGraphe _g, boolean showLabel) {
super(_cs, _g, showLabel);
//nombre de courbe + branche+ section + x
if (cs_.length > 0) {
- maxCol_ = cs_.length + 3;
- Set<EGTimeLabel> set = new HashSet<>();
final EGAxeHorizontal h = g_.getTransformer().getXAxe();
- for (int i = cs_.length - 1; i >= 0; i--) {
- final EGCourbe c = cs_[i];
- final LoiConstanteCourbeModel model = (LoiConstanteCourbeModel) c.getModel();
- final TIntObjectHashMap<String> subLabelsBranches = model.getSubLabels(CruePrefix.P_BRANCHE);
- final TIntObjectHashMap<String> subLabelsSection = model.getSubLabels(CruePrefix.P_SECTION);
- for (int j = model.getNbValues() - 1; j >= 0; j--) {
- final double x = model.getX(j);
- EGTimeLabel value = new EGTimeLabel(x);
- set.add(value);
- value.setLabel(subLabelsBranches.get(j));
- value.setSubLabel(subLabelsSection.get(j));
+ //on arrange par run
+ Map<ReportRunKey, List<EGCourbe>> courbesByRun = getCourbesByRun(_cs);
+ for (Map.Entry<ReportRunKey, List<EGCourbe>> entry : courbesByRun.entrySet()) {
+
+ List<EGCourbe> listOfCourbes = entry.getValue();
+ List<EGTimeLabel> values = getXValues(listOfCourbes);
+ final ColumnData brancheColumn = data.addColumn();
+ final ColumnData sectionColumn = data.addColumn();
+ final ColumnData xColumn = data.addColumn();
+ brancheColumn.type = String.class;
+ ReportRunKey key = entry.getKey();
+ brancheColumn.columnName = NbBundle.getMessage(ReportLongitudinalExportDataBuilder.class, "BrancheColumn.Name") + BusinessMessages.ENTITY_SEPARATOR + key.
+ getDisplayName();
+ sectionColumn.type = String.class;
+ sectionColumn.columnName = NbBundle.getMessage(ReportLongitudinalExportDataBuilder.class, "SectionColumn.Name") + BusinessMessages.ENTITY_SEPARATOR + key.
+ getDisplayName();
+ xColumn.type = CtuluTableCellDoubleValue.class;
+ xColumn.columnName = h.getTitre() + BusinessMessages.ENTITY_SEPARATOR + key.getDisplayName();
+ for (EGTimeLabel line : values) {
+ brancheColumn.values.add(line.getLabel());
+ sectionColumn.values.add(line.getSubLabel());
+ xColumn.values.add(getXValueFor(line.getX()));
}
+ for (EGCourbe c : listOfCourbes) {
+ ColumnData valueColumn = data.addColumn();
+ valueColumn.type = CtuluTableCellDoubleValue.class;
+ valueColumn.columnName = c.getTitle();
+ for (EGTimeLabel line : values) {
+ valueColumn.values.add(getYValueFor(c, c.interpol(line.getX())));
+ }
+ }
}
- List<EGTimeLabel> values = new ArrayList<>(set);
- Collections.sort(values);
- time_ = new double[values.size()];
- for (int i = 0; i < time_.length; i++) {
- time_[i] = values.get(i).getX();
+ maxCol_ = data.columns.size();
+ }
+ }
+
+ protected List<EGTimeLabel> getXValues(List<EGCourbe> value) {
+ Set<EGTimeLabel> set = new HashSet<>();
+ for (EGCourbe c : value) {
+ final LoiConstanteCourbeModel model = (LoiConstanteCourbeModel) c.getModel();
+ final TIntObjectHashMap<String> subLabelsBranches = model.getSubLabels(CruePrefix.P_BRANCHE);
+ final TIntObjectHashMap<String> subLabelsSection = model.getSubLabels(CruePrefix.P_SECTION);
+ for (int j = model.getNbValues() - 1; j >= 0; j--) {
+ final double x = model.getX(j);
+ EGTimeLabel timeValue = new EGTimeLabel(x);
+ set.add(timeValue);
+ timeValue.setLabel(subLabelsBranches.get(j));
+ timeValue.setSubLabel(subLabelsSection.get(j));
}
- Arrays.sort(time_);
- maxLine_ = time_.length;
- column_ = new String[maxCol_];
- column_[COLUMN_BRANCHE] = NbBundle.getMessage(ReportLongitudinalExportDataBuilder.class, "BrancheColumn.Name");
- column_[COLUMN_SECTION] = NbBundle.getMessage(ReportLongitudinalExportDataBuilder.class, "SectionColumn.Name");
- column_[COLUMN_X] = h.getTitre();
- branches = new ArrayList<>();
- sections = new ArrayList<>();
- for (EGTimeLabel value : values) {
- branches.add(value.getLabel());
- sections.add(value.getSubLabel());
+ }
+ List<EGTimeLabel> values = new ArrayList<>(set);
+ Collections.sort(values);
+ return values;
+ }
+
+ protected Map<ReportRunKey, List<EGCourbe>> getCourbesByRun(final EGCourbe[] _cs) {
+ Map<ReportRunKey, List<EGCourbe>> courbesByRun = new LinkedHashMap<>();
+ for (int i = 0; i < _cs.length; i++) {
+ EGCourbe c = _cs[i];
+ final LoiConstanteCourbeModel model = (LoiConstanteCourbeModel) c.getModel();
+ ReportRunVariableTimeKey key = (ReportRunVariableTimeKey) model.getKey();
+ List<EGCourbe> courbes = courbesByRun.get(key.getReportRunKey());
+ if (courbes == null) {
+ courbes = new ArrayList<>();
+ courbesByRun.put(key.getReportRunKey(), courbes);
}
- int offset = 3;
- for (int i = 0; i < _cs.length; i++) {
- column_[i + offset] = _cs[i].getTitle();
- }
+ courbes.add(c);
}
+ return courbesByRun;
}
@Override
public Class getColumnClass(int _i) {
- if (_i == COLUMN_BRANCHE || _i == COLUMN_SECTION) {
- return String.class;
- }
- return CtuluTableCellDoubleValue.class;
+ return data.columns.get(_i).type;
}
@Override
+ public String getColumnName(int _i) {
+ return data.columns.get(_i).columnName;
+ }
+
+ @Override
public int[] getSelectedRows() {
return FuEmptyArrays.INT0;
}
@Override
public Object getValue(int _row, int _col) {
- if (_col == COLUMN_BRANCHE) {
- return branches.get(_row);
- }
- if (_col == COLUMN_SECTION) {
- return sections.get(_row);
- }
- final double x = time_[_row];
- if (_col == COLUMN_X) {
- return getXValueFor(x);
- }
- if (cs_.length > 0) {
- EGCourbe c = cs_[_col - 3];
- return getYValueFor(c, c.interpol(x));
- }
- return StringUtils.EMPTY;
+ return data.columns.get(_col).values.get(_row);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|