From b51c351cc330479046db0cd9db9dbc44c24ecb6e Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Fri, 7 Jan 2011 11:21:46 +0100 Subject: [PATCH] Isolate 'Task Information' group box into a component, and embed it into 'Resource allocation' and 'Limiting Resource allocation' FEA: ItEr68OTS03XestionRecursosEstratexicosItEr67OTS03 --- .../web/planner/allocation/FormBinder.java | 7 +- .../ResourceAllocationController.java | 48 +++---- .../planner/allocation/TaskInformation.java | 125 ++++++++++++++++++ .../LimitingResourceAllocationController.java | 47 +++---- .../_tabPanelLimitingResourceAllocation.zul | 32 +---- ..._tabPanelNonLimitingResourceAllocation.zul | 37 +----- .../planner/taskpanels/_taskInformation.zul | 51 +++++++ 7 files changed, 230 insertions(+), 117 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java create mode 100644 navalplanner-webapp/src/main/webapp/planner/taskpanels/_taskInformation.zul diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java index 9091e1cdd..054faddfb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java @@ -650,9 +650,8 @@ public class FormBinder { } } - public void setRecommendedAllocation(Button recommendedAllocation) { - this.btnRecommendedAllocation = recommendedAllocation; - btnRecommendedAllocation.addEventListener(Events.ON_CLICK, new EventListener() { + public EventListener getRecommendedAllocationListener() { + return new EventListener() { @Override public void onEvent(Event event) throws Exception { recommendedAllocationIsPressed = !recommendedAllocationIsPressed; @@ -662,7 +661,7 @@ public class FormBinder { deactivatingRecommendedAllocation(); } } - }); + }; } private void activatingRecommendedAllocation() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java index 5a8f454c0..ca9454fdf 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java @@ -42,6 +42,7 @@ import org.navalplanner.web.common.Util; import org.navalplanner.web.common.components.AllocationSelector; import org.navalplanner.web.common.components.NewAllocationSelector; import org.navalplanner.web.common.components.NewAllocationSelectorCombo; +import org.navalplanner.web.planner.allocation.TaskInformation.ITotalHoursCalculationListener; import org.navalplanner.web.planner.order.PlanningState; import org.navalplanner.web.planner.taskedition.EditTaskController; import org.navalplanner.web.planner.taskedition.TaskPropertiesController; @@ -91,10 +92,10 @@ public class ResourceAllocationController extends GenericForwardComposer { private IResourceAllocationModel resourceAllocationModel; - private Grid orderElementHoursGrid; - private ResourceAllocationRenderer resourceAllocationRenderer = new ResourceAllocationRenderer(); + private TaskInformation taskInformation; + private Grid allocationsGrid; private FormBinder formBinder; @@ -107,8 +108,6 @@ public class ResourceAllocationController extends GenericForwardComposer { private Radiogroup calculationTypeSelector; - private Button btnRecommendedAllocation; - private Checkbox extendedViewCheckbox; private Intbox taskWorkableDays; @@ -244,16 +243,15 @@ public class ResourceAllocationController extends GenericForwardComposer { formBinder.setWorkerSearchTab(workerSearchTab); formBinder .setNewAllocationSelectorCombo(newAllocationSelectorCombo); - formBinder.setRecommendedAllocation(btnRecommendedAllocation); + + initializeTaskInformationComponent(); CalculationTypeRadio calculationTypeRadio = CalculationTypeRadio .from(formBinder.getCalculatedValue()); calculationTypeRadio.doTheSelectionOn(calculationTypeSelector); tbResourceAllocation.setSelected(true); - orderElementHoursGrid.setModel(new ListModelList( - resourceAllocationModel.getHoursAggregatedByCriterions())); - orderElementHoursGrid.setRowRenderer(createOrderElementHoursRenderer()); + newAllocationSelector.setAllocationsAdder(resourceAllocationModel); newAllocationSelectorCombo .setAllocationsAdder(resourceAllocationModel); @@ -263,6 +261,20 @@ public class ResourceAllocationController extends GenericForwardComposer { } } + private void initializeTaskInformationComponent() { + taskInformation.initializeGridTaskRows(resourceAllocationModel + .getHoursAggregatedByCriterions()); + taskInformation.onRecomendAllocation(formBinder + .getRecommendedAllocationListener()); + taskInformation.onCalculateTotalHours(new ITotalHoursCalculationListener() { + + @Override + public Integer getTotalHours() { + return resourceAllocationModel.getOrderHours(); + } + }); + } + private Label lbTaskStart; private Label lbTaskEnd; @@ -308,22 +320,6 @@ public class ResourceAllocationController extends GenericForwardComposer { AggregatedHoursGroup data); } - private static final ICellForDetailItemRenderer hoursCellRenderer = new ICellForDetailItemRenderer() { - - @Override - public Component cellFor( - HoursRendererColumn column, - AggregatedHoursGroup data) { - return column.cell(column, data); - } - }; - - private RowRenderer createOrderElementHoursRenderer() { - return OnColumnsRowRenderer - .create( - hoursCellRenderer, Arrays.asList(HoursRendererColumn.values())); - } - /** * Pick resources selected from {@link NewAllocationSelector} and add them to * resource allocation list @@ -577,10 +573,6 @@ public class ResourceAllocationController extends GenericForwardComposer { .setCalculatedValue(calculationTypeRadio.getCalculatedValue()); } - public Integer getOrderHours() { - return resourceAllocationModel.getOrderHours(); - } - public List getResourceAllocations() { return formBinder != null ? plusAggregatingRow(formBinder .getCurrentRows()) : Collections diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java new file mode 100644 index 000000000..0fa0640b1 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/TaskInformation.java @@ -0,0 +1,125 @@ +/* + * This file is part of NavalPlan + * + * Copyright (C) 2011 Igalia, S.L + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.web.planner.allocation; + +import java.util.Arrays; +import java.util.List; + +import org.navalplanner.business.orders.entities.AggregatedHoursGroup; +import org.navalplanner.web.common.Util; +import org.navalplanner.web.planner.allocation.ResourceAllocationController.HoursRendererColumn; +import org.zkoss.ganttz.timetracker.ICellForDetailItemRenderer; +import org.zkoss.ganttz.timetracker.OnColumnsRowRenderer; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.HtmlMacroComponent; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zul.Button; +import org.zkoss.zul.Footer; +import org.zkoss.zul.Grid; +import org.zkoss.zul.RowRenderer; +import org.zkoss.zul.SimpleListModel; + +/** + * + * @author Diego Pino Garcia + * + */ +public class TaskInformation extends HtmlMacroComponent { + + private Grid gridTaskRows; + + private Button btnRecommendedAllocation; + + private Footer totalEstimatedHours; + + private ITotalHoursCalculationListener totalHoursCalculation; + + + @Override + public void afterCompose() { + super.afterCompose(); + this.setVariable("taskInformationController", this, true); + + btnRecommendedAllocation = (Button) getFellowIfAny("btnRecommendedAllocation"); + gridTaskRows = (Grid) getFellowIfAny("gridTaskRows"); + totalEstimatedHours = (Footer) getFellowIfAny("totalEstimatedHours"); + } + + public Integer getTotalHours() { + if (totalHoursCalculation != null) { + return totalHoursCalculation.getTotalHours(); + } + return Integer.valueOf(0); + } + + public void initializeGridTaskRows(List rows) { + gridTaskRows.setModel(new SimpleListModel(rows)); + gridTaskRows.setRowRenderer(newTaskRowsRenderer()); + } + + public void onRecomendAllocation(EventListener event) { + btnRecommendedAllocation.addEventListener(Events.ON_CLICK, event); + } + + public void showRecomendedAllocationButton() { + btnRecommendedAllocation.setVisible(true); + } + + public void hideRecomendedAllocationButton() { + btnRecommendedAllocation.setVisible(false); + } + + private RowRenderer newTaskRowsRenderer() { + return OnColumnsRowRenderer.create(hoursCellRenderer, + Arrays.asList(HoursRendererColumn.values())); + } + + private static final ICellForDetailItemRenderer hoursCellRenderer = new ICellForDetailItemRenderer() { + + @Override + public Component cellFor(HoursRendererColumn column, + AggregatedHoursGroup data) { + return column.cell(column, data); + } + }; + + /** + * + * Listener for calculating total number of hours + * + * @author Diego Pino Garcia + * + */ + public interface ITotalHoursCalculationListener { + + public Integer getTotalHours(); + + } + + public void onCalculateTotalHours(ITotalHoursCalculationListener totalHoursCalculation) { + this.totalHoursCalculation = totalHoursCalculation; + } + + public void refreshTotalHours() { + Util.reloadBindings(totalEstimatedHours); + } + +} \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationController.java index d0e1c420b..6e47f9a67 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/limiting/allocation/LimitingResourceAllocationController.java @@ -20,26 +20,23 @@ package org.navalplanner.web.planner.limiting.allocation; -import java.util.Arrays; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.navalplanner.business.orders.entities.AggregatedHoursGroup; import org.navalplanner.business.planner.entities.ResourceAllocation; import org.navalplanner.web.common.IMessagesForUser; import org.navalplanner.web.common.Util; import org.navalplanner.web.common.components.AllocationSelector; import org.navalplanner.web.common.components.NewAllocationSelector; import org.navalplanner.web.common.components.NewAllocationSelectorCombo; -import org.navalplanner.web.planner.allocation.ResourceAllocationController.HoursRendererColumn; +import org.navalplanner.web.planner.allocation.TaskInformation; +import org.navalplanner.web.planner.allocation.TaskInformation.ITotalHoursCalculationListener; import org.navalplanner.web.planner.order.PlanningState; import org.navalplanner.web.planner.taskedition.EditTaskController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; -import org.zkoss.ganttz.timetracker.ICellForDetailItemRenderer; -import org.zkoss.ganttz.timetracker.OnColumnsRowRenderer; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -47,7 +44,6 @@ import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Grid; import org.zkoss.zul.Intbox; import org.zkoss.zul.Label; -import org.zkoss.zul.ListModelList; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; import org.zkoss.zul.Listitem; @@ -76,12 +72,10 @@ public class LimitingResourceAllocationController extends GenericForwardComposer private Tab tabLimitingWorkerSearch; - private Grid gridLimitingOrderElementHours; + private TaskInformation limitingTaskInformation; private Grid gridLimitingAllocations; - private Label totalEstimatedHours; - private boolean disableHours = true; private NewAllocationSelectorCombo limitingNewAllocationSelectorCombo; @@ -125,33 +119,28 @@ public class LimitingResourceAllocationController extends GenericForwardComposer limitingNewAllocationSelector.setAllocationsAdder(resourceAllocationModel); limitingNewAllocationSelectorCombo .setAllocationsAdder(resourceAllocationModel); - gridLimitingOrderElementHours.setModel(new ListModelList( - resourceAllocationModel.getHoursAggregatedByCriteria())); - gridLimitingOrderElementHours.setRowRenderer(createOrderElementHoursRenderer()); + + initializeTaskInformationComponent(); + Util.reloadBindings(gridLimitingAllocations); - Util.reloadBindings(totalEstimatedHours); } catch (Exception e) { LOG.error(e.getStackTrace()); } } - private static final ICellForDetailItemRenderer hoursCellRenderer = - new ICellForDetailItemRenderer() { + private void initializeTaskInformationComponent() { + limitingTaskInformation.initializeGridTaskRows(resourceAllocationModel + .getHoursAggregatedByCriteria()); + limitingTaskInformation.hideRecomendedAllocationButton(); + limitingTaskInformation + .onCalculateTotalHours(new ITotalHoursCalculationListener() { - @Override - public Component cellFor(HoursRendererColumn column, - AggregatedHoursGroup data) { - return column.cell(column, data); - } - }; - - private RowRenderer createOrderElementHoursRenderer() { - return OnColumnsRowRenderer.create(hoursCellRenderer, Arrays - .asList(HoursRendererColumn.values())); - } - - public Integer getOrderHours() { - return resourceAllocationModel.getOrderHours(); + @Override + public Integer getTotalHours() { + return resourceAllocationModel.getOrderHours(); + } + }); + limitingTaskInformation.refreshTotalHours(); } public List getResourceAllocationRows() { diff --git a/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelLimitingResourceAllocation.zul b/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelLimitingResourceAllocation.zul index d23766f9f..ba28417b5 100644 --- a/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelLimitingResourceAllocation.zul +++ b/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelLimitingResourceAllocation.zul @@ -29,6 +29,10 @@ class="org.navalplanner.web.common.components.NewAllocationSelector" macroURI="/resources/search/allocation_selector.zul" ?> + + @@ -37,33 +41,9 @@ - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelNonLimitingResourceAllocation.zul b/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelNonLimitingResourceAllocation.zul index 67ca263b1..4241ae56a 100644 --- a/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelNonLimitingResourceAllocation.zul +++ b/navalplanner-webapp/src/main/webapp/planner/taskpanels/_tabPanelNonLimitingResourceAllocation.zul @@ -25,9 +25,13 @@ macroURI="/resources/search/allocation_selector_combo.zul" ?> + + @@ -37,36 +41,9 @@ - - - - - - - - - - - - - - - - - - - - - - - -