This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 48a13fc3292818ca7cc537d1f8f01a3acfb8d924 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat May 23 13:03:22 2015 +0200 ajout d'une opération pour grouper par taille (refs #7138) --- .../report/model/operations/GroupByLength.java | 87 ++++++++++++++++++++++ .../fr.ird.observe.report.model.ReportOperation | 3 +- 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/observe-business/src/main/java/fr/ird/observe/report/model/operations/GroupByLength.java b/observe-business/src/main/java/fr/ird/observe/report/model/operations/GroupByLength.java new file mode 100644 index 0000000..6980ca1 --- /dev/null +++ b/observe-business/src/main/java/fr/ird/observe/report/model/operations/GroupByLength.java @@ -0,0 +1,87 @@ +package fr.ird.observe.report.model.operations; + +import fr.ird.observe.report.model.DataMatrix; +import fr.ird.observe.report.model.Report; +import fr.ird.observe.report.model.ReportOperation; +import org.apache.commons.lang3.mutable.MutableInt; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; + +import java.awt.Dimension; +import java.awt.Point; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * To group by legnth (first column, second row is count). + * + * I don't know how to make this with hibernate the group by + sum does not work :(. + * + * Created on 5/23/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public class GroupByLength extends ReportOperation { + + private static final long serialVersionUID = 1L; + + private static final String OPERATION_NAME = "GroupByLength"; + + @Override + public String getOperationName() { + return OPERATION_NAME; + } + + @Override + protected Point computeLocation(Report model, DataMatrix incoming) { + Point result = new Point(0, incoming.getHeight()); + return result; + } + + @Override + protected Dimension computeDimension(Report model, DataMatrix incoming) { + Set<String> lengths = new HashSet<String>(); + for (int i = 0; i < incoming.getHeight(); i++) { + lengths.add((String) incoming.getValue(0, i)); + } + Dimension result = new Dimension(incoming.getWidth(), lengths.size()); + return result; + } + + @Override + public DataMatrix execute(TopiaContext tx, Report model, DataMatrix incoming, Map<String, Object> variables, Map<String, List<?>> repeatVariablesUniverse) throws TopiaException { + + // Première passe pour grouper par classe de taille + Map<String, MutableInt> data = new LinkedHashMap<String, MutableInt>(); + for (int i = 0, nbRows = incoming.getHeight(); i < nbRows; i++) { + + String length = (String) incoming.getValue(0, i); + Integer count = Integer.valueOf(incoming.getValue(1, i).toString()); + + MutableInt mutableInt = data.get(length); + if (mutableInt == null) { + mutableInt = new MutableInt(); + data.put(length, mutableInt); + } + mutableInt.add(count); + + } + + // Deuxième passe pour remplir la matrice + DataMatrix result = createTmpMatrix(model, incoming); + int row = 0; + for (Map.Entry<String, MutableInt> entry : data.entrySet()) { + String length = entry.getKey(); + MutableInt mutableInt = entry.getValue(); + result.setValue(0, row, length); + result.setValue(1, row, mutableInt.intValue()); + row++; + } + + return result; + } +} diff --git a/observe-business/src/main/resources/META-INF/services/fr.ird.observe.report.model.ReportOperation b/observe-business/src/main/resources/META-INF/services/fr.ird.observe.report.model.ReportOperation index 26810d5..a15219d 100644 --- a/observe-business/src/main/resources/META-INF/services/fr.ird.observe.report.model.ReportOperation +++ b/observe-business/src/main/resources/META-INF/services/fr.ird.observe.report.model.ReportOperation @@ -2,4 +2,5 @@ fr.ird.observe.report.model.operations.SumIntColumn fr.ird.observe.report.model.operations.SumColumn fr.ird.observe.report.model.operations.SumIntRow fr.ird.observe.report.model.operations.SumRow -fr.ird.observe.report.model.operations.ExecuteRequests \ No newline at end of file +fr.ird.observe.report.model.operations.ExecuteRequests +fr.ird.observe.report.model.operations.GroupByLength \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.