diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java index fec55eedf..976d6eeac 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java @@ -324,4 +324,8 @@ public class MutableTreeModel extends AbstractTreeModel { return getChildCount(getRoot()) == 0; } + public boolean hasChildren(T node) { + return getChildCount(node) > 0; + } + } diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml index 5270c0461..330997c8e 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/materials/entities/Materials.hbm.xml @@ -11,7 +11,7 @@ - + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java index 66dbc9286..941f80b40 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/IMaterialsModel.java @@ -36,12 +36,14 @@ public interface IMaterialsModel { void addMaterialCategory(MaterialCategory parent, MaterialCategory child) throws ValidationException; + void addMaterialToMaterialCategory(MaterialCategory materialCategory); + + void confirmSave() throws ValidationException; + MutableTreeModel getMaterialCategories(); + List getMaterials(MaterialCategory materialCategory); + void removeMaterialCategory(MaterialCategory materialCategory); - void addMaterialToMaterialCategory(MaterialCategory materialCategory); - - List getMaterials(); - } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java index 471bc6d2f..ce25f4e48 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsController.java @@ -22,6 +22,7 @@ package org.navalplanner.web.materials; import static org.navalplanner.web.I18nHelper._; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -32,6 +33,7 @@ import org.navalplanner.business.materials.entities.Material; import org.navalplanner.business.materials.entities.MaterialCategory; import org.navalplanner.web.common.IMessagesForUser; import org.navalplanner.web.common.Level; +import org.navalplanner.web.common.MessagesForUser; import org.navalplanner.web.common.Util; import org.springframework.beans.factory.annotation.Autowired; import org.zkoss.zk.ui.Component; @@ -43,6 +45,7 @@ import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; import org.zkoss.zul.Grid; import org.zkoss.zul.Messagebox; +import org.zkoss.zul.SimpleListModel; import org.zkoss.zul.Textbox; import org.zkoss.zul.Tree; import org.zkoss.zul.TreeModel; @@ -68,7 +71,7 @@ public class MaterialsController extends private Tree categoriesTree; - private Grid materials; + private Grid gridMaterials; private Textbox txtCategory; @@ -81,6 +84,7 @@ public class MaterialsController extends public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); comp.setVariable("materialsController", this, true); + messagesForUser = new MessagesForUser(messagesContainer); } public TreeModel getMaterialCategories() { @@ -233,11 +237,52 @@ public class MaterialsController extends } final MaterialCategory materialCategory = (MaterialCategory) treeitem.getValue(); materialsModel.addMaterialToMaterialCategory(materialCategory); - Util.reloadBindings(materials); + Util.reloadBindings(gridMaterials); + } + + public void saveAndExit() { + save(); + messagesForUser.showMessage(Level.INFO, _("Materials saved")); + } + + private void save() { + validate(); + try { + materialsModel.confirmSave(); + } catch (ValidationException e) { + messagesForUser.showInvalidValues(e); + } + } + + private void validate() { + ConstraintChecker. + } + + public void saveAndContinue() { + + } + + public void cancel() { + + } + + public void refreshMaterials() { + final List materials = getMaterials(); + gridMaterials.setModel(new SimpleListModel(materials)); + Util.reloadBindings(gridMaterials); } public List getMaterials() { - return materialsModel.getMaterials(); + return getMaterials(categoriesTree.getSelectedItem()); + } + + private List getMaterials(Treeitem treeitem) { + final List result = new ArrayList(); + if (treeitem != null) { + final MaterialCategory materialCategory = (MaterialCategory) treeitem.getValue(); + result.addAll(materialsModel.getMaterials(materialCategory)); + } + return result; } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java index 0d875b3ce..817e1bfb0 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/materials/MaterialsModel.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Set; import org.apache.commons.lang.Validate; +import org.hibernate.Hibernate; import org.hibernate.validator.InvalidValue; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.materials.daos.IMaterialCategoryDAO; @@ -32,31 +33,7 @@ public class MaterialsModel implements IMaterialsModel { MutableTreeModel materialCategories = MutableTreeModel.create(MaterialCategory.class); - List materials = new ArrayList(); - - private void initializeMaterialCategories() { - final List categories = categoryDAO.getAllRootMaterialCategories(); - for (MaterialCategory materialCategory: categories) { - materialCategories.addToRoot(materialCategory); - addCategories(materialCategory, materialCategory.getSubcategories()); - } - } - - @SuppressWarnings("unchecked") - private void initializeMaterials() { - materials = new ArrayList(materialDAO.getAll()); - } - - private void addCategories(MaterialCategory materialCategory, Set categories) { - for (MaterialCategory category: categories) { - materialCategories.add(materialCategory, category); - final Set subcategories = category.getSubcategories(); - if (subcategories != null) { - addCategories(category, subcategories); - } - } - } - + @Override @Transactional(readOnly=true) public MutableTreeModel getMaterialCategories() { if (materialCategories.isEmpty()) { @@ -65,13 +42,38 @@ public class MaterialsModel implements IMaterialsModel { return materialCategories; } + private void initializeMaterialCategories() { + final List categories = categoryDAO.getAllRootMaterialCategories(); + for (MaterialCategory materialCategory: categories) { + initializeMaterials(materialCategory.getMaterials()); + materialCategories.addToRoot(materialCategory); + addCategories(materialCategory, materialCategory.getSubcategories()); + } + } + + private void initializeMaterials(Set materials) { + for (Material each: materials) { + each.getDescription(); + } + } + + private void addCategories(MaterialCategory materialCategory, Set categories) { + for (MaterialCategory category: categories) { + initializeMaterials(category.getMaterials()); + materialCategories.add(materialCategory, category); + final Set subcategories = category.getSubcategories(); + if (subcategories != null) { + addCategories(category, subcategories); + } + } + } + @Override @Transactional(readOnly=true) - public List getMaterials() { - if (materials.isEmpty()) { - initializeMaterials(); - } - return materials; + public List getMaterials(MaterialCategory materialCategory) { + List result = new ArrayList(); + result.addAll(materialCategory.getMaterials()); + return result; } @Override @@ -115,7 +117,30 @@ public class MaterialsModel implements IMaterialsModel { public void addMaterialToMaterialCategory(MaterialCategory materialCategory) { Material material = Material.create(""); material.setCategory(materialCategory); - materials.add(material); + materialCategory.addMaterial(material); + } + + @Override + @Transactional + public void confirmSave() throws ValidationException { + List categories = new ArrayList(); + asList(materialCategories.getRoot(), categories); + for (MaterialCategory each: categories) { + categoryDAO.save(each); + } + } + + private void asList(MaterialCategory root, List result) { + List list = new ArrayList(); + for (int i = 0; i < materialCategories.getChildCount(root); i++) { + final MaterialCategory materialCategory = materialCategories.getChild(root, i); + list.add(materialCategory); + result.add(materialCategory); + } + + for (MaterialCategory each: list) { + asList(each, result); + } } } diff --git a/navalplanner-webapp/src/main/webapp/materials/materials.zul b/navalplanner-webapp/src/main/webapp/materials/materials.zul index 7b009630a..81db15d58 100644 --- a/navalplanner-webapp/src/main/webapp/materials/materials.zul +++ b/navalplanner-webapp/src/main/webapp/materials/materials.zul @@ -1,21 +1,21 @@ @@ -29,57 +29,93 @@ - - - + apply="org.navalplanner.web.materials.MaterialsController"> + + + + + + + + + + + + +