/* * This file is part of LibrePlan * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ package org.libreplan.web.templates; import org.libreplan.business.templates.entities.OrderElementTemplate; import org.libreplan.web.common.Util; import org.libreplan.web.templates.advances.AdvancesAssignmentComponent; import org.libreplan.web.templates.criterionrequirements.CriterionRequirementTemplateComponent; import org.libreplan.web.templates.labels.LabelsAssignmentToTemplateComponent; import org.libreplan.web.templates.materials.MaterialAssignmentTemplateComponent; import org.libreplan.web.templates.quality.QualityFormAssignerComponent; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Window; /** * @author Óscar González Fernández <ogonzalez@igalia.com> */ public class EditTemplateWindowController extends GenericForwardComposer { private static final String ATTRIBUTE_NAME = EditTemplateWindowController.class.getSimpleName(); public static EditTemplateWindowController bindTo(IOrderTemplatesModel model, Window editTemplateWindow) { ensureWindowIsClosed(editTemplateWindow); if (editTemplateWindow.getAttribute(ATTRIBUTE_NAME) != null) { return (EditTemplateWindowController) editTemplateWindow.getAttribute(ATTRIBUTE_NAME); } EditTemplateWindowController controller = new EditTemplateWindowController(editTemplateWindow, model); editTemplateWindow.setAttribute(ATTRIBUTE_NAME, controller); doAfterCompose(editTemplateWindow, controller); return controller; } private static void ensureWindowIsClosed(Window editTemplateWindow) { editTemplateWindow.setVisible(true); editTemplateWindow.setVisible(false); } private static void doAfterCompose(Window editTemplateWindow, EditTemplateWindowController controller) { try { controller.doAfterCompose(editTemplateWindow); } catch (Exception e) { throw new RuntimeException(e); } } private final IOrderTemplatesModel model; private final Window editTemplateWindow; public EditTemplateWindowController(Window editTemplateWindow, IOrderTemplatesModel model) { this.editTemplateWindow = editTemplateWindow; this.model = model; } public void open(OrderElementTemplate template) { editTemplateWindow.setMode("modal"); bindAdvancesAssignment(template); bindOrderElementLabels(template); bindCriterionRequirements(template); bindOrderElementMaterials(template); bindAssignedQualityForms(template); Util.reloadBindings(editTemplateWindow); } private <T extends Component> T find(String id, Class<T> type) { return type.cast(editTemplateWindow.getFellow(id)); } private void bindAdvancesAssignment(OrderElementTemplate template) { AdvancesAssignmentComponent component = find("advancesAssignment", AdvancesAssignmentComponent.class); component.useModel(template); } private void bindOrderElementLabels(OrderElementTemplate template) { LabelsAssignmentToTemplateComponent component = find("listOrderElementLabels", LabelsAssignmentToTemplateComponent.class); component.getController().setTemplate(template); component.getController().openWindow(model); } private void bindCriterionRequirements(OrderElementTemplate template) { CriterionRequirementTemplateComponent component = find("listOrderElementCriterionRequirements", CriterionRequirementTemplateComponent.class); component.getController().openWindow(model, template); } private void bindOrderElementMaterials(OrderElementTemplate template) { MaterialAssignmentTemplateComponent component = find("listOrderElementMaterials", MaterialAssignmentTemplateComponent.class); component.getController().openWindow(template); } private void bindAssignedQualityForms(OrderElementTemplate template) { QualityFormAssignerComponent c = find("assignedQualityForms", QualityFormAssignerComponent.class); c.useModel(model, template); } public void onClick$backButton() { editTemplateWindow.setVisible(false); } }