/* * 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.materials; import org.apache.commons.lang3.StringUtils; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.materials.entities.UnitType; import org.libreplan.web.common.BaseCRUDController; import org.libreplan.web.common.Level; import org.libreplan.web.common.Util; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.CheckEvent; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Button; import org.zkoss.zul.Constraint; import org.zkoss.zul.Hbox; import org.zkoss.zul.Label; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; import org.zkoss.zkplus.spring.SpringUtil; import java.util.ConcurrentModificationException; import java.util.List; import static org.libreplan.web.I18nHelper._; /** * Controller for the listing and editing unit types. * * @author Javier Moran Rua <jmoran@igalia.com> * @author Cristina Alvarino Perez <cristina.alvarino@comtecsf.es> */ public class UnitTypeController extends BaseCRUDController<UnitType> { private IUnitTypeModel unitTypeModel; public UnitTypeController(){ unitTypeModel = (IUnitTypeModel) SpringUtil.getBean("unitTypeModel"); } public List<UnitType> getUnitTypes() { return unitTypeModel.getUnitTypes(); } public RowRenderer getUnitTypeRenderer() { return new RowRenderer() { @Override public void render(Row row, Object data, int i) { final UnitType unitType = (UnitType) data; appendUnitTypeName(row, unitType); appendOperations(row, unitType); row.addEventListener(Events.ON_CLICK, new EventListener() { @Override public void onEvent(Event event) { goToEditForm(unitType); } }); } private void appendUnitTypeName(Row row, UnitType unitType) { row.appendChild(new Label(unitType.getMeasure())); } private void appendOperations(Row row, final UnitType unitType) { Hbox hbox = new Hbox(); hbox.appendChild(Util.createEditButton(new EventListener() { @Override public void onEvent(Event event) { goToEditForm(unitType); } })); Button removeButton = Util.createRemoveButton(new EventListener() { @Override public void onEvent(Event event) { confirmDelete(unitType); } }); removeButton.setDisabled(unitTypeModel.isUnitTypeUsedInAnyMaterial(unitType)); hbox.appendChild(removeButton); row.appendChild(hbox); } }; } public UnitType getUnitType() { return unitTypeModel.getCurrentUnitType(); } public Constraint uniqueMeasureName() { return new Constraint() { @Override public void validate(Component comp, Object value) { String strValue = (String) value; if (StringUtils.isBlank(strValue)) { throw new WrongValueException(comp, _("cannot be empty")); } if (unitTypeModel.existsAnotherUnitTypeWithName(strValue)) { throw new WrongValueException(comp, _("The meausure name is not valid. There is " + "another unit type with the same " + "measure name")); } } }; } public Constraint uniqueCode() { return new Constraint() { @Override public void validate(Component comp, Object value) { String strValue = (String) value; if (StringUtils.isBlank(strValue)) { throw new WrongValueException(comp, _("cannot be empty")); } if (unitTypeModel.existsAnotherUnitTypeWithCode(strValue)) { throw new WrongValueException(comp, _("The code is not valid. There is another " + "unit type with the same code")); } } }; } @Override protected void save() throws ValidationException { unitTypeModel.confirmSave(); } public void onCheckGenerateCode(Event e) { CheckEvent ce = (CheckEvent) e; if (ce.isChecked()) { // We have to auto-generate the code for new objects try { unitTypeModel.setCodeAutogenerated(ce.isChecked()); } catch (ConcurrentModificationException err) { messagesForUser.showMessage(Level.ERROR, err.getMessage()); } } Util.reloadBindings(editWindow); } @Override protected String getEntityType() { return _("Material Unit"); } @Override protected String getPluralEntityType() { return _("Material Units"); } @Override protected void initCreate() { unitTypeModel.initCreate(); } @Override protected void initEdit(UnitType unitType) { unitTypeModel.initEdit(unitType); } @Override protected UnitType getEntityBeingEdited() { return unitTypeModel.getCurrentUnitType(); } @Override protected void delete(UnitType unitType) throws InstanceNotFoundException { unitTypeModel.remove(unitType); } @Override protected boolean beforeDeleting(UnitType unitType) { return !unitTypeModel.isUnitTypeUsedInAnyMaterial(unitType); } }