diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignCommand.java index 6fbdfc222..26de97726 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignCommand.java @@ -21,6 +21,7 @@ package org.navalplanner.web.planner.reassign; import static org.navalplanner.business.i18n.I18nHelper._; +import org.apache.commons.lang.Validate; import org.navalplanner.business.planner.entities.TaskElement; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -35,9 +36,23 @@ import org.zkoss.ganttz.extensions.IContext; @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class ReassignCommand implements IReassignCommand { + public interface IConfigurationResult { + public void result(ReassignConfiguration configuration); + } + @Override public void doAction(IContext context) { - ReassignController.openOn(context.getRelativeTo()); + ReassignController.openOn(context.getRelativeTo(), + new IConfigurationResult() { + @Override + public void result(ReassignConfiguration configuration) { + doReassignation(configuration); + } + }); + } + + private void doReassignation(ReassignConfiguration configuration) { + Validate.notNull(configuration); } @Override diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignConfiguration.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignConfiguration.java new file mode 100644 index 000000000..bfb6b16a8 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignConfiguration.java @@ -0,0 +1,71 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * 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.reassign; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang.Validate; +import org.joda.time.LocalDate; +import org.navalplanner.web.planner.reassign.ReassignController.Type; +import org.zkoss.ganttz.data.Task; + +/** + * @author Óscar González Fernández + * + */ +public class ReassignConfiguration { + + public static ReassignConfiguration create(Type type, + LocalDate date) { + return new ReassignConfiguration(type, date); + } + + private ReassignController.Type type; + + private LocalDate date; + + private ReassignConfiguration(ReassignController.Type type, LocalDate date) { + this.type = type; + Validate.isTrue(!type.needsAssociatedDate() || date != null); + this.date = date == null ? new LocalDate() : date; + } + + public List filterForReassignment(List list) { + List result = new ArrayList(); + for (Task each : list) { + if (each.isLeaf() && isChoosenForReassignation(each)) { + result.add(each); + } + } + return result; + } + + private boolean isChoosenForReassignation(Task each) { + return type == Type.ALL || isAfterDate(each); + } + + private boolean isAfterDate(Task each) { + LocalDate start = LocalDate.fromDateFields(each.getBeginDate()); + LocalDate end = LocalDate.fromDateFields(each.getEndDate()); + return start.compareTo(date) > 0 || end.compareTo(date) > 0; + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignController.java index 640cead0d..14b64251e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/reassign/ReassignController.java @@ -25,6 +25,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; +import org.joda.time.LocalDate; +import org.navalplanner.web.planner.reassign.ReassignCommand.IConfigurationResult; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -105,12 +107,13 @@ public class ReassignController extends GenericForwardComposer { } - public static void openOn(org.zkoss.zk.ui.Component component) { + public static void openOn(org.zkoss.zk.ui.Component component, + IConfigurationResult configurationResult) { Window result = (Window) Executions.createComponents( "/planner/reassign.zul", component, Collections.emptyMap()); ReassignController controller = (ReassignController) result .getAttribute("controller"); - controller.showWindow(); + controller.showWindow(configurationResult); } private Window window; @@ -123,7 +126,10 @@ public class ReassignController extends GenericForwardComposer { private Type currentType = Type.ALL; - private void showWindow() { + private IConfigurationResult configurationResult; + + private void showWindow(IConfigurationResult configurationResult) { + this.configurationResult = configurationResult; try { window.setMode("modal"); } catch (InterruptedException e) { @@ -192,6 +198,11 @@ public class ReassignController extends GenericForwardComposer { } } window.setVisible(false); + LocalDate associatedDate = this.associatedDate.getValue() != null ? LocalDate + .fromDateFields(this.associatedDate.getValue()) + : null; + configurationResult.result(ReassignConfiguration + .create(currentType, associatedDate)); } public void cancel() {