Group MonteCarloGraph by week

FEA: ItEr63OTS06MonteCarlo
This commit is contained in:
Diego Pino Garcia 2010-11-12 14:05:43 +01:00
parent 24529339d5
commit 6a4bd259d9
3 changed files with 64 additions and 12 deletions

View file

@ -43,6 +43,7 @@ import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Decimalbox;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Intbox;
@ -78,6 +79,8 @@ public class MonteCarloController extends GenericForwardComposer {
private Button btnRunMonteCarlo;
private Checkbox cbGroupByWeeks;
private Window monteCarloChartWindow;
public MonteCarloController() {
@ -157,8 +160,10 @@ public class MonteCarloController extends GenericForwardComposer {
"/planner/montecarlo_function.zul", self, args);
MonteCarloGraphController controller = (MonteCarloGraphController) result
.getVariable("monteCarloGraphController", true);
final String orderName = monteCarloModel.getOrderName();
controller.generateMonteCarloGraph(orderName, data);
final boolean groupByWeeks = cbGroupByWeeks.isChecked();
controller.generateMonteCarloGraph(orderName, data, groupByWeeks);
return result;
}

View file

@ -3,11 +3,9 @@ package org.navalplanner.web.montecarlo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.config.BeanDefinition;
@ -47,16 +45,58 @@ public class MonteCarloGraphController extends GenericForwardComposer {
self.setVisible(false);
}
public void generateMonteCarloGraph(String orderName, Map<LocalDate, BigDecimal> data) {
CategoryModel xymodel = new SimpleCategoryModel();
List<LocalDate> dates = new ArrayList(data.keySet());
Collections.sort(dates);
for (LocalDate each: dates) {
String labelDate = each.toString();
xymodel.setValue(orderName, labelDate, data.get(each));
public void generateMonteCarloGraph(String orderName, Map<LocalDate, BigDecimal> data, boolean byWeek) {
CategoryModel xymodel;
if (byWeek) {
xymodel = generateMonteCarloGraphByWeek(orderName, groupByWeek(data));
} else {
xymodel = generateMonteCarloGraphByDay(orderName, data);
}
monteCarloChart.setModel(xymodel);
}
private CategoryModel generateMonteCarloGraphByDay(String orderName, Map<LocalDate, BigDecimal> data) {
CategoryModel result = new SimpleCategoryModel();
List<LocalDate> dates = new ArrayList(data.keySet());
Collections.sort(dates);
for (LocalDate date: dates) {
String labelDate = date.toString();
result.setValue(orderName, labelDate, data.get(date));
}
return result;
}
private CategoryModel generateMonteCarloGraphByWeek(String orderName, Map<Integer, BigDecimal> data) {
CategoryModel result = new SimpleCategoryModel();
List<Integer> weeks = new ArrayList(data.keySet());
Collections.sort(weeks);
Integer first = weeks.get(0);
Integer last = weeks.get(weeks.size() - 1);
for (Integer i = first; i <= last; i = i + 1) {
String labelDate = "W" + i;
BigDecimal probability = data.get(i);
if (probability == null) {
probability = BigDecimal.ZERO;
}
result.setValue(orderName, labelDate, probability);
}
return result;
}
private Map<Integer, BigDecimal> groupByWeek(Map<LocalDate, BigDecimal> data) {
Map<Integer, BigDecimal> result = new HashMap<Integer, BigDecimal>();
// Group values of each date by week
for (LocalDate date: data.keySet()) {
Integer week = Integer.valueOf(date.getWeekOfWeekyear());
BigDecimal value = result.get(week);
value = (value != null) ? value.add(data.get(date)) : data.get(date);
result.put(week, value);
}
return result;
}
}

View file

@ -61,17 +61,24 @@
<columns>
<column width="200px" />
<column />
<column />
</columns>
<rows>
<row>
<label value="${i18n:_('Group by weeks')}" />
<checkbox id="cbGroupByWeeks"
width="200px" />
<label value="" />
</row>
<row>
<label value="${i18n:_('Number of iterations')}" />
<intbox id="ibIterations"
width="200px"
constraint="no empty:${i18n:_('cannot be null or empty')}" />
<button id="btnRunMonteCarlo" label="${i18n:_('Go!')}" />
</row>
</rows>
</grid>
<button id="btnRunMonteCarlo" label="${i18n:_('Go!')}" />
</hbox>
</window>