ItEr28S11AltaEtiquetasTipoEtiquetaItEr27S11: Add label to OrderElement

This commit is contained in:
Diego Pino Garcia 2009-10-01 18:12:31 +02:00 committed by Javier Moran Rua
parent 12de5c9f8c
commit ead0ee0f6e
8 changed files with 168 additions and 11 deletions

View file

@ -24,6 +24,7 @@ import java.util.List;
import org.navalplanner.business.common.daos.IGenericDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
/**
* @author Diego Pino Garcia <dpino@igalia.com>
@ -32,4 +33,5 @@ public interface ILabelDAO extends IGenericDAO<Label, Long> {
List<Label> getAll();
Label findByNameAndType(String labelName, LabelType labelType);
}

View file

@ -22,8 +22,10 @@ package org.navalplanner.business.labels.daos;
import java.util.List;
import org.hibernate.criterion.Restrictions;
import org.navalplanner.business.common.daos.GenericDAOHibernate;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@ -43,4 +45,10 @@ public class LabelDAO extends GenericDAOHibernate<Label, Long> implements
return list(Label.class);
}
@Override
public Label findByNameAndType(String labelName, LabelType labelType) {
return (Label) getSession().createCriteria(Label.class).add(
Restrictions.eq("name", labelName)).add(
Restrictions.eq("type", labelType)).uniqueResult();
}
}

View file

@ -30,6 +30,7 @@ import org.springframework.web.context.support.WebApplicationContextUtils;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.HtmlMacroComponent;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
/**
* Autocomplete component
@ -67,6 +68,10 @@ public class Autocomplete extends HtmlMacroComponent {
finder = (IFinder) getBean(StringUtils.uncapitalize(classname));
}
public Comboitem getSelectedItem() {
return combo.getSelectedItem();
}
private Object getBean(String classname) {
HttpServletRequest servletRequest = (HttpServletRequest) Executions
.getCurrent().getNativeRequest();

View file

@ -1,7 +1,20 @@
package org.navalplanner.web.orders;
import static org.navalplanner.web.I18nHelper._;
import java.util.List;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.web.common.Util;
import org.navalplanner.web.common.components.Autocomplete;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Textbox;
/**
* Controller for showing OrderElement assigned labels
@ -12,10 +25,57 @@ import org.zkoss.zk.ui.util.GenericForwardComposer;
public class AssignedLabelsToOrderElementController extends
GenericForwardComposer {
private IAssignedLabelsToOrderElementModel assignedLabelsToOrderElementModel;
private Autocomplete cbLabelType;
private Grid directLabels;
private Textbox txtLabelName;
public OrderElement getOrderElement() {
return assignedLabelsToOrderElementModel.getOrderElement();
}
public void setOrderElement(OrderElement orderElement) {
assignedLabelsToOrderElementModel.setOrderElement(orderElement);
}
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp.getFellow("listOrderElementLabels"));
comp.setVariable("assignedLabelsController", this, true);
}
public void createAndAssign() {
// Check LabelType is not null
final Comboitem comboitem = cbLabelType.getSelectedItem();
if (comboitem == null || comboitem.getValue() == null) {
throw new WrongValueException(cbLabelType, _("cannot be null"));
}
// Check Label is not null or empty
final String labelName = txtLabelName.getValue();
if (labelName == null || labelName.isEmpty()) {
throw new WrongValueException(txtLabelName,
_("cannot be null or empty"));
}
final LabelType labelType = (LabelType) comboitem.getValue();
if (!assignedLabelsToOrderElementModel.existsLabelByNameAndType(
labelName, labelType)) {
addLabel(labelName, labelType);
}
}
private void addLabel(String labelName, LabelType labelType) {
assignedLabelsToOrderElementModel.addLabel(labelName, labelType);
Util.reloadBindings(directLabels);
}
public List<Label> getLabels() {
return assignedLabelsToOrderElementModel.getLabels();
}
}

View file

@ -1,7 +1,15 @@
package org.navalplanner.web.orders;
import org.navalplanner.business.orders.daos.OrderElementDAO;
import java.util.ArrayList;
import java.util.List;
import org.navalplanner.business.labels.daos.ILabelDAO;
import org.navalplanner.business.labels.daos.ILabelTypeDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.OrderElement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@ -15,11 +23,23 @@ import org.springframework.transaction.annotation.Transactional;
public class AssignedLabelsToOrderElementModel implements
IAssignedLabelsToOrderElementModel {
OrderElementDAO orderDAO;
@Autowired
IOrderElementDAO orderDAO;
OrderElement orderElement;
@Transactional(readOnly = true)
@Autowired
ILabelTypeDAO labelTypeDAO;
@Autowired
ILabelDAO labelDAO;
@Override
public OrderElement getOrderElement() {
return orderElement;
}
@Override
public void setOrderElement(OrderElement orderElement) {
this.orderElement = orderElement;
}
@ -28,4 +48,23 @@ public class AssignedLabelsToOrderElementModel implements
}
public List<Label> getLabels() {
List<Label> result = new ArrayList<Label>();
if (orderElement.getLabels() != null) {
result.addAll(orderElement.getLabels());
}
return result;
}
@Transactional(readOnly = true)
public boolean existsLabelByNameAndType(String labelName,
LabelType labelType) {
return (labelDAO.findByNameAndType(labelName, labelType) != null);
}
public void addLabel(String labelName, LabelType labelType) {
Label label = Label.create(labelName);
label.setType(labelType);
orderElement.addLabel(label);
}
}

View file

@ -1,8 +1,49 @@
package org.navalplanner.web.orders;
import java.util.List;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
import org.navalplanner.business.orders.entities.OrderElement;
/**
* @author Diego Pino Garcia <dpino@igalia.com>
*/
public interface IAssignedLabelsToOrderElementModel {
/**
*
* @param labelName
* @param labelType
* @return
*/
boolean existsLabelByNameAndType(String labelName, LabelType labelType);
/**
*
* @param labelName
* @param labelType
*/
void addLabel(String labelName, LabelType labelType);
/**
*
* @return
*/
OrderElement getOrderElement();
/**
* Set {@link OrderElement}
*
* @param orderElement
*/
void setOrderElement(OrderElement orderElement);
/**
* Returns {@link OrderElement}
*
* @return
*/
public List<Label> getLabels();
}

View file

@ -199,6 +199,7 @@ public class OrderElementController extends GenericForwardComposer {
throws Exception {
assignedLabelsController = new AssignedLabelsToOrderElementController();
assignedLabelsController.doAfterCompose(comp);
assignedLabelsController.setOrderElement(getOrderElement());
}
private void setupManageOrderElementAdvancesController(Component comp)

View file

@ -1,5 +1,5 @@
<vbox id="listOrderElementLabels">
<!-- Indirect labels -->
<!-- Indirect labels -->
<vbox>
<label value="${i18n:_('Indirect labels')}" />
<grid>
@ -18,16 +18,16 @@
<!-- Direct labels -->
<vbox>
<label value="${i18n:_('Direct labels')}" />
<grid>
<grid id="directLabels" model="@{assignedLabelsController.labels}">
<columns>
<column label="${i18n:_('Label type')}" />
<column label="${i18n:_('Value')}" />
<column label="${i18n:_('Operations')}" />
</columns>
<rows>
<row>
<label value=""/>
<label value=""/>
<row self="@{each='label'}">
<label value="@{label.type.name}"/>
<label value="@{label.name}"/>
<button label="${i18n:_('Delete')}" />
</row>
</rows>
@ -48,8 +48,9 @@
<label value="${i18n:_('Create and assign label')}" />
</vbox>
<hbox>
<autocomplete finder="LabelTypeFinder" buttonVisible="true" />
<textbox />
<button style="margin-top: -4px" label="${i18n:_('Create &amp; Assign')}" />
<autocomplete id="cbLabelType" finder="LabelTypeFinder" buttonVisible="true" />
<textbox id="txtLabelName" constraint="no empty:${i18n:_('cannot be null or empty')}"/>
<button style="margin-top: -4px" label="${i18n:_('Create &amp; Assign')}"
onClick="assignedLabelsController.createAndAssign()"/>
</hbox>
</vbox>