diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTrackedTable.java b/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTrackedTable.java index 71e642ec7..86724f3cb 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTrackedTable.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/TimeTrackedTable.java @@ -1,21 +1,25 @@ package org.zkoss.ganttz.timetracker; +import java.util.List; +import java.util.concurrent.Callable; + import org.zkoss.zul.ListModel; +import org.zkoss.zul.ListModelList; import org.zkoss.zul.RowRenderer; -public class TimeTrackedTable extends TimeTrackerComponent { +public class TimeTrackedTable extends TimeTrackerComponent { - private final ListModel listModel; + private final Callable> data; + private final ICellForDetailItemRenderer cellRenderer; - private final RowRenderer rowRenderer; - - public TimeTrackedTable(ListModel listModel, RowRenderer rowRenderer, + public TimeTrackedTable(Callable> dataSource, + ICellForDetailItemRenderer cellRenderer, TimeTracker timeTracker, String idTimeTrackerElement) { super(timeTracker, "~./ganttz/zul/timetracker/secondlevelgrid.zul", idTimeTrackerElement); - this.listModel = listModel; - this.rowRenderer = rowRenderer; + this.data = dataSource; + this.cellRenderer = cellRenderer; } @Override @@ -23,11 +27,20 @@ public class TimeTrackedTable extends TimeTrackerComponent { } public ListModel getTableModel() { - return listModel; + return new ListModelList(getData()); } - public RowRenderer getGridRenderer() { - return rowRenderer; + private List getData() { + try { + return data.call(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public RowRenderer getRowRenderer() { + return OnDetailItemsRowRenderer.create(cellRenderer, + getDetailsSecondLevel()); } } diff --git a/ganttzk/src/main/resources/web/ganttz/zul/timetracker/secondlevelgrid.zul b/ganttzk/src/main/resources/web/ganttz/zul/timetracker/secondlevelgrid.zul index 4a6a101d7..cc14e5628 100644 --- a/ganttzk/src/main/resources/web/ganttz/zul/timetracker/secondlevelgrid.zul +++ b/ganttzk/src/main/resources/web/ganttz/zul/timetracker/secondlevelgrid.zul @@ -1,5 +1,6 @@ - + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/FakeTimeTrackableTableController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/FakeTimeTrackableTableController.java new file mode 100644 index 000000000..442b3ab50 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/FakeTimeTrackableTableController.java @@ -0,0 +1,86 @@ +package org.navalplanner.web; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.concurrent.Callable; + +import org.joda.time.Days; +import org.joda.time.LocalDate; +import org.zkoss.ganttz.timetracker.ICellForDetailItemRenderer; +import org.zkoss.ganttz.timetracker.TimeTrackedTable; +import org.zkoss.ganttz.timetracker.TimeTracker; +import org.zkoss.ganttz.timetracker.zoom.DetailItem; +import org.zkoss.ganttz.util.Interval; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Div; +import org.zkoss.zul.Label; + +public class FakeTimeTrackableTableController extends GenericForwardComposer { + + private Div insertionPoint; + private TimeTrackedTable timeTrackedTable; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + + timeTrackedTable = new TimeTrackedTable(getDataSource(), + getRenderer(), new TimeTracker(createExampleInterval()), + "timetrackedtable"); + insertionPoint.appendChild(timeTrackedTable); + timeTrackedTable.afterCompose(); + } + + private Callable> getDataSource() { + return new Callable>() { + + @Override + public List call() throws Exception { + List result = new ArrayList(); + for (int i = 0; i < 10; i++) { + result.add(new FakeData(6)); + } + return result; + } + }; + } + + private ICellForDetailItemRenderer getRenderer() { + return new ICellForDetailItemRenderer() { + + @Override + public Component cellFor(DetailItem item, FakeData data) { + Label label = new Label(); + label.setValue(data.getHoursForDetailItem(item) + "h"); + return label; + } + }; + } + + private Interval createExampleInterval() { + LocalDate start = new LocalDate(2008, 1, 1); + LocalDate end = new LocalDate(2009, 1, 1); + return new Interval(asDate(start), asDate(end)); + } + + private Date asDate(LocalDate start) { + return start.toDateMidnight().toDate(); + } + +} + +class FakeData { + private final int hoursPerDay; + + FakeData(int hoursPerDay) { + this.hoursPerDay = hoursPerDay; + } + + public int getHoursForDetailItem(DetailItem detail) { + Days daysBetween = Days.daysBetween(detail.getStartDate(), + detail.getEndDate()); + return daysBetween.getDays() * hoursPerDay; + } +} diff --git a/navalplanner-webapp/src/main/webapp/planner/testtimetrackabletable.zul b/navalplanner-webapp/src/main/webapp/planner/testtimetrackabletable.zul new file mode 100644 index 000000000..ccb9a7880 --- /dev/null +++ b/navalplanner-webapp/src/main/webapp/planner/testtimetrackabletable.zul @@ -0,0 +1,19 @@ + + + + + + + + + + + + + +
+
+ +
\ No newline at end of file