From afc1924bc27c502c03b921c2f1e752ad2bfaad19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Sat, 3 Oct 2009 16:20:30 +0200 Subject: [PATCH] ItEr28S06CUAsignacionGrupoRecursosAPlanificacionItEr27S06: Adding classes to capture the current children --- .../web/common/ComponentsReplacer.java | 73 +++++++++++++++++++ .../web/common/IChildrenSnapshot.java | 28 +++++++ 2 files changed, 101 insertions(+) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/ComponentsReplacer.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/IChildrenSnapshot.java diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ComponentsReplacer.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ComponentsReplacer.java new file mode 100644 index 000000000..7c0a924a8 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ComponentsReplacer.java @@ -0,0 +1,73 @@ +/* + * 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.common; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Executions; + +public class ComponentsReplacer { + + private static class ChildrenSnapshot implements IChildrenSnapshot { + private final List children; + private final Component parent; + + public ChildrenSnapshot(Component parent, + List currentChildren) { + this.parent = parent; + this.children = currentChildren; + } + + @Override + public IChildrenSnapshot restore() { + List removedChildren = removeChildren(parent); + parent.getChildren().addAll(children); + return new ChildrenSnapshot(parent, removedChildren); + } + } + + /** + * @param parent + * @param script + * @param arguments + * @return + */ + public static IChildrenSnapshot replaceAllChildren(Component parent, + String script, + Map arguments) { + List currentChildren = removeChildren(parent); + ChildrenSnapshot result = new ChildrenSnapshot(parent, currentChildren); + Executions.createComponents(script, parent, arguments); + return result; + } + + private static List removeChildren(Component parent) { + List currentChildren = new ArrayList(parent + .getChildren()); + for (Component c : currentChildren) { + c.detach(); + } + return currentChildren; + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IChildrenSnapshot.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IChildrenSnapshot.java new file mode 100644 index 000000000..511354d3c --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IChildrenSnapshot.java @@ -0,0 +1,28 @@ +/* + * 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.common; + +public interface IChildrenSnapshot { + /** + * Restores the children that were current in a point in time + * @return a snapshot of the children that will be replaced + */ + public IChildrenSnapshot restore(); +} \ No newline at end of file