Author: bbrossaud Date: 2010-07-21 11:53:51 +0200 (Wed, 21 Jul 2010) New Revision: 112 Url: http://chorem.org/repositories/revision/bonzoms/112 Log: add some missing files Added: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceModel.java trunk/bonzoms-ui-zk/src/main/webapp/servicePage.zul Added: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceController.java (rev 0) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceController.java 2010-07-21 09:53:51 UTC (rev 112) @@ -0,0 +1,141 @@ +package org.chorem.bonzoms.ui; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.chorem.data.bonzoms.Address; +import org.chorem.data.bonzoms.Service; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.SuspendNotAllowedException; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Button; +import org.zkoss.zul.Label; +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; +import org.zkoss.zul.Window; + +/** + * + * @author bbrossaud + */ +public class ServiceController extends GenericForwardComposer { + + protected Model model = new Model(); + + protected ServiceModel serviceModel = new ServiceModel(); + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + String search = (String) arg.get("search"); + List<Service> services; + if (search != null && !search.isEmpty()) { + services = model.retrieveServicesBySearch(search); + } else { + services = model.retrieveAllServices(); + } + createServicesData(services); + } + + public void createServicesData(List<Service> services) { + for (Service service : services) { + Address address = model.retrieveAddressById(service.getAddress()); + ServiceData data = new ServiceData(service, address); + serviceModel.addData(data); + } + } + + public void createWindowServiceForm(ServiceData serviceData) throws SuspendNotAllowedException, InterruptedException { + Map<String, Object> map = new HashMap<String, Object>(); + if (serviceData != null) { + map.put("serviceData", serviceData); + } + Window win = (Window) Executions.createComponents("serviceFormPage.zul", null, map); + + win.addEventListener(ServiceFormController.EVENT_ON_SAVE_SERVICE, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + ServiceData data = (ServiceData) event.getData(); + if (data != null) { + int rowIndex = serviceModel.indexOf(data); + if (rowIndex == -1) { + serviceModel.addData(data); + } else { + serviceModel.reloadContent(rowIndex); + } + } + } + }); + + win.setPage(page); +// win.doHighlighted(); + win.setPosition("center"); +// win.doOverlapped(); + win.doModal(); + } + + protected Listcell addressesRenderer(ServiceData serviceData) { + Address address = serviceData.getAddress(); + String render = address.getName() + " (" + address.getCountry() + ") :\n"; + render += address.getAddress1() + " " + address.getAddress2() + "\n"; + render += address.getZipCode() + " " + address.getCity() + "\n"; + Label label = new Label(render); + label.setMultiline(true); + Listcell listcell = new Listcell(); + listcell.appendChild(label); + return listcell; + } + + /* + * Events + */ + public void onClick$newService() throws SuspendNotAllowedException, InterruptedException { + createWindowServiceForm(null); + } + + /* + * Renderers + */ + public ListitemRenderer getServiceDataRenderer() { + return new ListitemRenderer() { + + @Override + public void render(Listitem item, Object data) throws Exception { + item.setValue(data); + final ServiceData serviceData = (ServiceData) data; + + Listcell typeCell = new Listcell(serviceData.getService().getType()); + + Listcell addressCell = addressesRenderer(serviceData); + + Listcell detailsCell = new Listcell(); + + Button details = new Button("details"); + detailsCell.appendChild(details); + details.addEventListener("onClick", new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + createWindowServiceForm(serviceData); + } + }); + + item.appendChild(typeCell); + item.appendChild(addressCell); + item.appendChild(detailsCell); + } + }; + } + + /* + * Getter + */ + public ServiceModel getServiceModel() { + return serviceModel; + } +} Added: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceModel.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceModel.java (rev 0) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceModel.java 2010-07-21 09:53:51 UTC (rev 112) @@ -0,0 +1,53 @@ +package org.chorem.bonzoms.ui; + +import java.util.ArrayList; +import java.util.List; +import org.zkoss.zkplus.databind.BindingListModel; +import org.zkoss.zul.AbstractListModel; +import org.zkoss.zul.event.ListDataEvent; + +/** + * + * @author bbrossaud + */ +public class ServiceModel extends AbstractListModel implements BindingListModel { + + protected List<ServiceData> services = new ArrayList<ServiceData>(); + @Override + public Object getElementAt(int index) { + return services.get(index); + } + + @Override + public int getSize() { + return services.size(); + } + + @Override + public int indexOf(Object obj) { + return services.indexOf(obj); + } + + public void setServices(List<ServiceData> services) { + this.services = services; + fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1); + } + + public void addData(ServiceData newData) { + services.add(newData); + } + + public void removeData(ServiceData data) { + int interval = services.indexOf(data); + services.remove(data); + fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval); + } + + public void reloadContent(int rowIndex) { + fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex); + } + + public void reload() { + fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1); + } +} Added: trunk/bonzoms-ui-zk/src/main/webapp/servicePage.zul =================================================================== --- trunk/bonzoms-ui-zk/src/main/webapp/servicePage.zul (rev 0) +++ trunk/bonzoms-ui-zk/src/main/webapp/servicePage.zul 2010-07-21 09:53:51 UTC (rev 112) @@ -0,0 +1,15 @@ +<?page id="service" title="service" cacheable="false" language="xul/html" zscriptLanguage="Java"?> +<?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> +<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="service"?> + +<window id="service" apply="org.chorem.bonzoms.ui.ServiceController"> + Employees: <toolbarbutton id="newService" label="Add new service" /> + <listbox autopaging="true" mold="paging" id="serviceListBox" rows="20" model="@{service$composer.serviceModel}" + itemRenderer="@{service$composer.serviceDataRenderer}"> + <listhead> + <listheader label="Type" /> + <listheader label="Address" /> + <listheader label="Details" /> + </listhead> + </listbox> +</window> \ No newline at end of file