ItEr29S14ProcuraOrganizacionsTraballo: [Refactoring] Replaces ad-hoc bandbox for searching labels for bandboxSearch

This commit is contained in:
Diego Pino Garcia 2009-10-13 10:23:35 +02:00 committed by Javier Moran Rua
parent bc4500db25
commit 646d2ccb38
3 changed files with 18 additions and 153 deletions

View file

@ -22,7 +22,6 @@ package org.navalplanner.web.orders;
import static org.navalplanner.web.I18nHelper._;
import java.util.ArrayList;
import java.util.List;
import org.navalplanner.business.labels.entities.Label;
@ -30,19 +29,12 @@ 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.navalplanner.web.common.components.bandboxsearch.BandboxSearch;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.InputEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Bandbox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.SimpleListModel;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
@ -65,11 +57,7 @@ public class AssignedLabelsToOrderElementController extends
private Textbox txtLabelName;
private Bandbox bdLabels;
private Listbox lbLabels;
private LabelRenderer labelRenderer = new LabelRenderer();
private BandboxSearch bdLabels;
public OrderElement getOrderElement() {
return assignedLabelsToOrderElementModel.getOrderElement();
@ -86,16 +74,8 @@ public class AssignedLabelsToOrderElementController extends
public void openWindow(OrderElement orderElement) {
assignedLabelsToOrderElementModel.init(orderElement);
// Configure bandbox with all labels
final List<Label> allLabels = getAllLabels();
bdLabels.setVariable("allLabels", allLabels, true);
lbLabels.setModel(new SimpleListModel(allLabels));
// Initialize selectedLabel
bdLabels.setVariable("selectedLabel", null, true);
// Clear components
bdLabels.setValue("");
bdLabels.clear();
txtLabelName.setValue("");
Util.reloadBindings(window);
@ -109,54 +89,6 @@ public class AssignedLabelsToOrderElementController extends
window = (Window) comp;
}
/**
* On selecting one {@link Label} from bandbox listbox
*
* Selected {@link Label} is stored in an internal {@link Bandbox} variable:
* selectedLabel,
*
* @param event
*/
public void onSelectLabel(Event event) {
Listitem listitem = (Listitem) lbLabels.getSelectedItems().iterator()
.next();
Label label = (Label) listitem.getValue();
bdLabels.setValue(label.getType().getName() + " " + label.getName());
bdLabels.setVariable("selectedLabel", label, true);
bdLabels.close();
}
/**
* Search {@link Label} starting with input text
*
* @param event
*/
public void onSearchLabels(InputEvent event) {
bdLabels.setVariable("selectedLabel", null, true);
List<Label> filteredLabels = matchesString(event.getValue());
lbLabels.setModel(new SimpleListModel(filteredLabels));
lbLabels.invalidate();
}
/**
* Find {@link Label} which name or type start with prefix
*
* @param prefix
*/
@SuppressWarnings("unchecked")
private List<Label> matchesString(String prefix) {
List<Label> result = new ArrayList<Label>();
List<Label> labels = (List<Label>) bdLabels.getVariable("allLabels",
true);
for (Label label : labels) {
if (label.getName().contains(prefix)
|| label.getType().getName().contains(prefix)) {
result.add(label);
}
}
return result;
}
/**
* Executed on pressing Assign button
*
@ -164,7 +96,7 @@ public class AssignedLabelsToOrderElementController extends
*
*/
public void onAssignLabel() {
Label label = (Label) bdLabels.getVariable("selectedLabel", true);
Label label = (Label) bdLabels.getSelectedElement();
if (label == null) {
throw new WrongValueException(bdLabels, _("please, select a label"));
}
@ -172,24 +104,7 @@ public class AssignedLabelsToOrderElementController extends
throw new WrongValueException(bdLabels, _("already assigned"));
}
assignLabel(label);
clear(bdLabels);
}
/**
* Clears {@link Bandbox}
*
* Fills bandbox list with all labels, clear bandbox textbox, and set
* selected label to null
*
* @param bandbox
*/
@SuppressWarnings("unchecked")
private void clear(Bandbox bandbox) {
final List<Label> labels = (List<Label>) bandbox.getVariable(
"allLabels", true);
lbLabels.setModel(new SimpleListModel(labels));
bdLabels.setValue("");
bdLabels.setVariable("selectedLabel", null, true);
bdLabels.clear();
}
/**
@ -219,8 +134,7 @@ public class AssignedLabelsToOrderElementController extends
Label label = assignedLabelsToOrderElementModel
.findLabelByNameAndType(labelName, labelType);
if (label == null) {
label = createLabel(labelName, labelType);
addLabel(label);
label = addLabel(labelName, labelType);
} else {
// Label is already assigned?
if (isAssigned(label)) {
@ -232,17 +146,15 @@ public class AssignedLabelsToOrderElementController extends
clear(txtLabelName);
}
/**
* Add {@link Label} to {@link Bandbox} list when assigning new label
*
* @param label
*/
private void addLabel(Label label) {
List<Label> labels = (List<Label>) bdLabels.getVariable("allLabels",
true);
labels.add(label);
bdLabels.setVariable("allLabels", labels, true);
Util.reloadBindings(lbLabels);
private Label addLabel(String labelName, LabelType labelType) {
Label label = createLabel(labelName, labelType);
bdLabels.addElement(label);
return label;
}
private Label createLabel(String labelName, LabelType labelType) {
return assignedLabelsToOrderElementModel.createLabel(labelName,
labelType);
}
private void clear(Textbox textbox) {
@ -258,11 +170,6 @@ public class AssignedLabelsToOrderElementController extends
return assignedLabelsToOrderElementModel.isAssigned(label);
}
private Label createLabel(String labelName, LabelType labelType) {
return assignedLabelsToOrderElementModel.createLabel(labelName,
labelType);
}
public void deleteLabel(Label label) {
assignedLabelsToOrderElementModel.deleteLabel(label);
Util.reloadBindings(directLabels);
@ -305,31 +212,4 @@ public class AssignedLabelsToOrderElementController extends
close();
}
public ListitemRenderer getLabelRenderer() {
return labelRenderer;
}
/**
* Render for {@link Label}
*
* @author Diego Pino Garcia <dpino@igalia.com>
*/
private class LabelRenderer implements ListitemRenderer {
@Override
public void render(Listitem item, Object data) throws Exception {
Label label = (Label) data;
item.setValue(data);
final Listcell labelType = new Listcell();
labelType.setLabel(label.getType().getName());
labelType.setParent(item);
final Listcell labelName = new Listcell();
labelName.setLabel(label.getName());
labelName.setParent(item);
}
}
}

View file

@ -59,7 +59,7 @@ public class AssignedLabelsToOrderElementModel implements
OrderElement orderElement;
Set<Label> cacheLabels;
Set<Label> cacheLabels = new HashSet<Label>();
@Override
public OrderElement getOrderElement() {
@ -81,7 +81,6 @@ public class AssignedLabelsToOrderElementModel implements
private void initializeCacheLabels() {
if (cacheLabels == null) {
System.out.println("### initializeCache");
cacheLabels = new HashSet<Label>();
final List<Label> labels = labelDAO.getAll();
initializeLabels(labels);

View file

@ -71,22 +71,8 @@
<vbox>
<label value="${i18n:_('Assign Label')}" />
<hbox>
<bandbox id="bdLabels" autodrop="true"
onChanging="assignedLabelsController.onSearchLabels(event)">
<bandpopup>
<vbox height="50px">
<listbox id="lbLabels" width="200px"
height="100px" vflex="true"
itemRenderer="@{assignedLabelsController.labelRenderer}"
onSelect="assignedLabelsController.onSelectLabel(event)">
<listhead>
<listheader label="Type" />
<listheader label="Label" />
</listhead>
</listbox>
</vbox>
</bandpopup>
</bandbox>
<bandboxSearch id="bdLabels" finder="LabelBandboxFinder"
model="@{assignedLabelsController.allLabels}" />
<button label="${i18n:_('Assign')}"
onClick="assignedLabelsController.onAssignLabel()"
style="margin-top: -4px" />