Author: bbrossaud Date: 2010-07-21 17:27:32 +0200 (Wed, 21 Jul 2010) New Revision: 113 Url: http://chorem.org/repositories/revision/bonzoms/113 Log: addition fullText search Added: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/AddressFormController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractsFormController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/WikittyModel.java trunk/bonzoms-ui-zk/src/main/webapp/addressFormPage.zul trunk/bonzoms-ui-zk/src/main/webapp/contractsFormPage.zul Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/CompanyFormController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractFormController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeFormController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/MainController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/Model.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/PersonFormController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ResultController.java trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceFormController.java trunk/bonzoms-ui-zk/src/main/webapp/contractFormPage.zul trunk/bonzoms-ui-zk/src/main/webapp/resultPage.zul Added: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/AddressFormController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/AddressFormController.java (rev 0) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/AddressFormController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -0,0 +1,52 @@ +package org.chorem.bonzoms.ui; + +import org.chorem.data.bonzoms.Address; +import org.chorem.data.bonzoms.AddressImpl; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zkplus.databind.AnnotateDataBinder; +import org.zkoss.zkplus.databind.DataBinder; + +/** + * + * @author bbrossaud + */ +public class AddressFormController extends GenericForwardComposer { + + protected Model model = new Model(); + + protected Address address = new AddressImpl(); + + public final static String EVENT_ON_SAVE_ADDRESS = "onSaveAddress"; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + Address data = (Address) arg.get("address"); + if (data != null) { + this.address = data; + } + DataBinder binder = new AnnotateDataBinder(comp); + binder.bindBean("composer", this); + binder.loadAll(); + } + + /* + * Events + */ + public void onClick$saveAddress() { + address = model.createAddress(address); + + Events.postEvent(EVENT_ON_SAVE_ADDRESS, this.self, address); + + self.detach(); + } + + /* + * Getters + */ + public Address getAddress() { + return address; + } +} Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/CompanyFormController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/CompanyFormController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/CompanyFormController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -23,6 +23,7 @@ */ package org.chorem.bonzoms.ui; +import java.util.ArrayList; import java.util.List; import org.chorem.data.bonzoms.Address; import org.chorem.data.bonzoms.AddressImpl; @@ -79,8 +80,10 @@ _companyData.getEmailsModel().addData(email); } - protected void initCompany(CompanyData company) { - _companyData = company; + protected void initCompany(CompanyData companyData) { + _companyData = companyData; + List<Address> addresses = _model.retrieveAddressesByIds(new ArrayList<String>(companyData.getCompany().getAddress())); + _companyData.setAddresses(addresses); _companyData.setEmailsModelList(_companyData.getCompany().getEmails()); _companyData.setPhonesModelList(_companyData.getCompany().getPhones()); } Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractFormController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractFormController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractFormController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -1,7 +1,5 @@ package org.chorem.bonzoms.ui; -import java.util.ArrayList; -import java.util.List; import org.chorem.data.bonzoms.EmploymentContract; import org.chorem.data.bonzoms.EmploymentContractImpl; import org.zkoss.zk.ui.Component; @@ -9,77 +7,44 @@ import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zkplus.databind.AnnotateDataBinder; import org.zkoss.zkplus.databind.DataBinder; -import org.zkoss.zul.Listbox; /** * - * @author sherkhan + * @author bbrossaud */ public class ContractFormController extends GenericForwardComposer { - protected ContractsData contractsData = new ContractsData(); - protected List<EmploymentContract> save = new ArrayList<EmploymentContract>(); - protected Listbox contractListbox; + protected Model model = new Model(); + protected EmploymentContract contract = new EmploymentContractImpl(); + public final static String EVENT_ON_SAVE_CONTRACT = "onSaveContract"; - public final static String EVENT_ON_SAVE_CONTRACTS = "onSaveContracts"; - @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); - ContractsData data = (ContractsData) arg.get("contractsData"); + EmploymentContract data = (EmploymentContract) arg.get("contract"); if (data != null) { - initContracts(data); - } else { - initDefaultContracts(); + this.contract = data; } DataBinder binder = new AnnotateDataBinder(comp); binder.bindBean("composer", this); binder.loadAll(); } - protected void initDefaultContracts() { - EmploymentContract contract = new EmploymentContractImpl(); - contractsData.getContractsModel().addData(contract); - } - - protected void initContracts(ContractsData data) { - contractsData = data; - save = new ArrayList<EmploymentContract>(contractsData.getContractsList()); - } - /* * Events */ - public void onClick$addContract() { - EmploymentContract contract = new EmploymentContractImpl(); - contractsData.getContractsModel().addData(contract); - } + public void onClick$saveContract() { + contract = model.createContract(contract); - public void onClick$deleteContract() { - int size = contractListbox.getItemCount(); - if (size > 1) { - EmploymentContract contract = (EmploymentContract) contractsData.getContractsModel().getElementAt(size -1); - contractsData.getContractsModel().removeData(contract); - String id = contract.getWikittyId(); - if (!id.isEmpty()) { - contractsData.getRemovedContracts().add(id); - } - } - } + Events.postEvent(EVENT_ON_SAVE_CONTRACT, this.self, contract); - public void onClick$save() { - Events.postEvent(EVENT_ON_SAVE_CONTRACTS, this.self, contractsData); self.detach(); } /* * Getters */ - public ContractsModel getContractsModel() { - return contractsData.getContractsModel(); + public EmploymentContract getContract() { + return contract; } - - public void onClose() { - contractsData.setContractsList(save); - } } Copied: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractsFormController.java (from rev 111, trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractFormController.java) =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractsFormController.java (rev 0) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ContractsFormController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -0,0 +1,85 @@ +package org.chorem.bonzoms.ui; + +import java.util.ArrayList; +import java.util.List; +import org.chorem.data.bonzoms.EmploymentContract; +import org.chorem.data.bonzoms.EmploymentContractImpl; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zkplus.databind.AnnotateDataBinder; +import org.zkoss.zkplus.databind.DataBinder; +import org.zkoss.zul.Listbox; + +/** + * + * @author sherkhan + */ +public class ContractsFormController extends GenericForwardComposer { + + protected ContractsData contractsData = new ContractsData(); + protected List<EmploymentContract> save = new ArrayList<EmploymentContract>(); + protected Listbox contractListbox; + + public final static String EVENT_ON_SAVE_CONTRACTS = "onSaveContracts"; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + ContractsData data = (ContractsData) arg.get("contractsData"); + if (data != null) { + initContracts(data); + } else { + initDefaultContracts(); + } + DataBinder binder = new AnnotateDataBinder(comp); + binder.bindBean("composer", this); + binder.loadAll(); + } + + protected void initDefaultContracts() { + EmploymentContract contract = new EmploymentContractImpl(); + contractsData.getContractsModel().addData(contract); + } + + protected void initContracts(ContractsData data) { + contractsData = data; + save = new ArrayList<EmploymentContract>(contractsData.getContractsList()); + } + + /* + * Events + */ + public void onClick$addContract() { + EmploymentContract contract = new EmploymentContractImpl(); + contractsData.getContractsModel().addData(contract); + } + + public void onClick$deleteContract() { + int size = contractListbox.getItemCount(); + if (size > 1) { + EmploymentContract contract = (EmploymentContract) contractsData.getContractsModel().getElementAt(size -1); + contractsData.getContractsModel().removeData(contract); + String id = contract.getWikittyId(); + if (!id.isEmpty()) { + contractsData.getRemovedContracts().add(id); + } + } + } + + public void onClick$save() { + Events.postEvent(EVENT_ON_SAVE_CONTRACTS, this.self, contractsData); + self.detach(); + } + + /* + * Getters + */ + public ContractsModel getContractsModel() { + return contractsData.getContractsModel(); + } + + public void onClose() { + contractsData.setContractsList(save); + } +} Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -74,8 +74,7 @@ Person person = _model.retrievePersonById(employee.getPerson()); if (person != null) { - List<Address> addresses = _model.retrieveAddressesByIds(new ArrayList<String>(person.getAddress())); - PersonData personData = new PersonData(person, addresses); + PersonData personData = new PersonData(person, null); data.setPersonData(personData); } _employeeModel.addData(data); Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeFormController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeFormController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/EmployeeFormController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -29,10 +29,9 @@ import java.util.Map; import java.util.Set; import org.chorem.data.bonzoms.Address; -import org.chorem.data.bonzoms.AddressImpl; import org.chorem.data.bonzoms.Employee; import org.chorem.data.bonzoms.EmploymentContract; -import org.chorem.data.bonzoms.EmploymentContractImpl; +import org.chorem.data.bonzoms.Person; import org.chorem.data.bonzoms.Service; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Executions; @@ -79,20 +78,18 @@ } protected void initPerson() { - if (_employeeData.getPersonData() != null) { - List<Address> addresses = _model.retrieveAddressesByIds(new ArrayList<String>(_employeeData.getPerson().getAddress())); - _employeeData.setPersonAddresses(addresses); - _employeeData.setPersonEmailsModelList(_employeeData.getPerson().getEmails()); - _employeeData.setPersonPhonesModelList(_employeeData.getPerson().getPhones()); + Person person = _model.retrievePersonById(_employeeData.getEmployee().getPerson()); + if (person != null) { + PersonData personData = new PersonData(person, null); + _employeeData.setPersonData(personData); } } protected void initService() { - if (_employeeData.getServiceData() != null) { - Service service = _model.retrieveServiceById(_employeeData.getEmployee().getService()); - Address address = _model.retrieveAddressById(service.getAddress()); - _employeeData.setService(service); - _employeeData.setServiceAddress(address); + Service service = _model.retrieveServiceById(_employeeData.getEmployee().getService()); + if (service != null) { + ServiceData serviceData = new ServiceData(service, null); + _employeeData.setServiceData(serviceData); } } @@ -148,7 +145,6 @@ /* * Events */ - public void onClick$saveEmployee() { Address workingAddress = _model.updateAddress(_employeeData.getWorkingAddress()); @@ -192,9 +188,9 @@ if (_employeeData.getContractsData() != null) { map.put("contractsData", _employeeData.getContractsData()); } - Window win = (Window) Executions.createComponents("contractFormPage.zul", null, map); + Window win = (Window) Executions.createComponents("contractsFormPage.zul", null, map); - win.addEventListener(ContractFormController.EVENT_ON_SAVE_CONTRACTS, new EventListener() { + win.addEventListener(ContractsFormController.EVENT_ON_SAVE_CONTRACTS, new EventListener() { @Override public void onEvent(Event event) throws Exception { Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/MainController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/MainController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/MainController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -92,18 +92,21 @@ * Events */ public void onOK$searchBox() { - Component win = content.getLastChild(); - String id = win.getId(); - Map<String, Object> map = initMap(); - if (id.equals(EMPLOYEE_WINDOW_ID)) { - createEmployeesPage(map); - } else if (id.equals(COMPANY_WINDOW_ID)) { - createCompaniesPage(map); - } else if (id.equals(PERSON_WINDOW_ID)) { - createPersonsPage(map); - } else if (id.equals(SERVICE_WINDOW_ID)) { - createServicesPage(map); - } +// Component win = content.getLastChild(); +// String id = win.getId(); +// Map<String, Object> map = initMap(); +// if (id.equals(EMPLOYEE_WINDOW_ID)) { +// createEmployeesPage(map); +// } else if (id.equals(COMPANY_WINDOW_ID)) { +// createCompaniesPage(map); +// } else if (id.equals(PERSON_WINDOW_ID)) { +// createPersonsPage(map); +// } else if (id.equals(SERVICE_WINDOW_ID)) { +// createServicesPage(map); +// } + removeAllContentPage(); + Component newContent = Executions.createComponents("resultPage.zul", null, initMap()); + content.appendChild(newContent); } public void onClick$searchButton() { Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/Model.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/Model.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/Model.java 2010-07-21 15:27:32 UTC (rev 113) @@ -32,6 +32,7 @@ import org.chorem.data.bonzoms.Person; import org.chorem.data.bonzoms.Service; import org.nuiton.wikitty.Criteria; +import org.nuiton.wikitty.Wikitty; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.search.Element; import org.nuiton.wikitty.search.Search; @@ -77,9 +78,20 @@ return proxy.store(person); } + public EmploymentContract createContract(EmploymentContract contract) { + return proxy.store(contract); + } + /* * Retrieve */ + public Employee retrieveEmployeeById(String id) { + if (id == null || id.isEmpty()) { + return null; + } + return proxy.restore(Employee.class, id); + } + public List<Employee> retrieveAllEmployees() { Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Employee.EXT_EMPLOYEE).criteria(); List<Employee> employees = proxy.findAllByCriteria(Employee.class, criteria).getAll(); @@ -170,6 +182,37 @@ return services; } + public EmploymentContract retrieveContractById(String id) { + if (id == null || id.isEmpty()) { + return null; + } + return proxy.restore(EmploymentContract.class, id); + } + + public List<Wikitty> retrieveAllBySearch(String str) { + Search search = Search.query().eq(Element.ELT_EXTENSION, Person.EXT_PERSON); + search = search.or().eq(Element.ELT_EXTENSION, Company.EXT_COMPANY); + search = search.or().eq(Element.ELT_EXTENSION, Employee.EXT_EMPLOYEE); + search = search.or().eq(Element.ELT_EXTENSION, Service.EXT_SERVICE); + search = search.or().eq(Element.ELT_EXTENSION, EmploymentContract.EXT_EMPLOYMENTCONTRACT); + search = search.or().eq(Element.ELT_EXTENSION, Address.EXT_ADDRESS); + search = search.and().keyword(str); + + Criteria criteria = search.criteria(); + + List<Wikitty> wikitties = proxy.findAllByCriteria(null, criteria).cast(null, proxy.getWikittyService()).getAll(); + wikitties = new ArrayList<Wikitty>(wikitties); + + return wikitties; + } + + public Company retrieveCompanyById(String id) { + if (id == null || id.isEmpty()) { + return null; + } + return proxy.restore(Company.class, id); + } + /* * Update */ Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/PersonFormController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/PersonFormController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/PersonFormController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package org.chorem.bonzoms.ui; import java.util.ArrayList; Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ResultController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ResultController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ResultController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -21,17 +21,33 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package org.chorem.bonzoms.ui; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; import java.util.Map; -import org.zkoss.zk.ui.event.CreateEvent; +import org.chorem.data.bonzoms.Address; +import org.chorem.data.bonzoms.Company; +import org.chorem.data.bonzoms.Employee; +import org.chorem.data.bonzoms.EmploymentContract; +import org.chorem.data.bonzoms.Person; +import org.chorem.data.bonzoms.Service; +import org.nuiton.util.StringUtil; +import org.nuiton.wikitty.Wikitty; +import org.nuiton.wikitty.WikittyExtension; +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.ForwardEvent; +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; /** * @@ -40,16 +56,175 @@ public class ResultController extends GenericForwardComposer { protected Model model = new Model(); + protected WikittyModel wikittyModel = new WikittyModel(); + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + String search = (String) arg.get("search"); + if (search == null) { + search = ""; + } + List<Wikitty> wikitties = model.retrieveAllBySearch(search); + wikittyModel.setWikitties(wikitties); + } + + protected void createPage(Map<String, Object> map, String zulFile) + throws SuspendNotAllowedException, InterruptedException { + Window win = (Window) Executions.createComponents(zulFile, null, map); + win.setPage(page); + win.setPosition("center"); + win.doModal(); + } + + + protected void createEmploymentContractPage(String id) throws SuspendNotAllowedException, InterruptedException { + EmploymentContract contract = model.retrieveContractById(id); + Map<String, Object> map = new HashMap<String, Object>(); + map.put("contract", contract); + createPage(map, "contractFormPage.zul"); + } + + protected void createPersonPage(String id) throws SuspendNotAllowedException, InterruptedException { + Person person = model.retrievePersonById(id); + PersonData data = new PersonData(person, null); + Map<String, Object> map = new HashMap<String, Object>(); + map.put("personData", data); + createPage(map, "personFormPage.zul"); + } + + protected void createEmployeePage(String id) throws SuspendNotAllowedException, InterruptedException { + Employee employee = model.retrieveEmployeeById(id); + EmployeeData data = new EmployeeData(employee, null); + Map<String, Object> map = new HashMap<String, Object>(); + map.put("employeeData", data); + createPage(map, "employeeFormPage.zul"); + } + + protected void createAddressPage(String id) throws SuspendNotAllowedException, InterruptedException { + Address address = model.retrieveAddressById(id); + Map<String, Object> map = new HashMap<String, Object>(); + map.put("address", address); + createPage(map, "addressFormPage.zul"); + } + + protected void createServicePage(String id) throws SuspendNotAllowedException, InterruptedException { + Service service = model.retrieveServiceById(id); + ServiceData data = new ServiceData(service, null); + Map<String, Object> map = new HashMap<String, Object>(); + map.put("serviceData", data); + createPage(map, "serviceFormPage.zul"); + } + + protected void createCompanyPage(String id) throws SuspendNotAllowedException, InterruptedException { + Company company = model.retrieveCompanyById(id); + CompanyData data = new CompanyData(company, null); + Map<String, Object> map = new HashMap<String, Object>(); + map.put("companyData", data); + createPage(map, "companyFormPage.zul"); + } + + protected void createPageByWikitty(Wikitty wikitty) throws SuspendNotAllowedException, InterruptedException { + Collection<String> extensions = wikitty.getExtensionNames(); + if (extensions.contains(EmploymentContract.EXT_EMPLOYMENTCONTRACT)) { + createEmploymentContractPage(wikitty.getId()); + } else if (extensions.contains(Person.EXT_PERSON)) { + createPersonPage(wikitty.getId()); + } else if (extensions.contains(Employee.EXT_EMPLOYEE)) { + createEmployeePage(wikitty.getId()); + } else if (extensions.contains(Address.EXT_ADDRESS)) { + createAddressPage(wikitty.getId()); + } else if (extensions.contains(Service.EXT_SERVICE)) { + createServicePage(wikitty.getId()); + } else if (extensions.contains(Company.EXT_COMPANY)) { + createCompanyPage(wikitty.getId()); + } + + } + /* * Events */ - public void onCreate$resultPage(Event event) { - Map<String, Object> args = retrieveArgsMap(event); + + /* + * Renderers + */ + + protected Listcell extensionsRenderer(Wikitty wikitty) { + Collection<String> extensions = wikitty.getExtensionNames(); + String render = StringUtil.join(extensions, ", ", false); + Listcell cell = new Listcell(render); + return cell; } - public Map<String, Object> retrieveArgsMap(Event event) { - CreateEvent createEvent = (CreateEvent) ((ForwardEvent) event).getOrigin(); - return createEvent.getArg(); + protected String valuesExtensionRenderer(String extensionName, Wikitty wikitty) { + String values = ""; + WikittyExtension wikittyExtension = wikitty.getExtension(extensionName); + Collection<String> fieldNames = wikittyExtension.getFieldNames(); + for (String fieldName : fieldNames) { + String result = wikitty.getFieldAsString(extensionName, fieldName); + if (result == null) { + result = ""; + } + if (result.length() > 50) { + result = result.substring(0, 46); + if (wikittyExtension.getFieldType(fieldName).isCollection()) { + result += "...]"; + } else { + result += "..."; + } + } + values += fieldName + " : " + result + "\n"; + } + return values; } + + protected Listcell valuesRenderer(Wikitty wikitty) { + String values = ""; + Listcell cell = new Listcell(); + Collection<String> extensions = wikitty.getExtensionNames(); + for (String extension : extensions) { + values += extension + "\n"; + values += valuesExtensionRenderer(extension, wikitty) + "\n"; + } + Label label = new Label(values); + label.setMultiline(true); + cell.appendChild(label); + return cell; + } + + public ListitemRenderer getWikittyRenderer() { + return new ListitemRenderer() { + + @Override + public void render(Listitem item, Object data) throws Exception { + item.setValue(data); + final Wikitty wikitty = (Wikitty) data; + + Listcell id = new Listcell(wikitty.getId()); + + Listcell extensions = extensionsRenderer(wikitty); + + Listcell values = valuesRenderer(wikitty); + + 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 { + createPageByWikitty(wikitty); + } + }); + } + }; + } + + /* + * Getter + */ + public WikittyModel getWikittyModel() { + return wikittyModel; + } } Modified: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceFormController.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceFormController.java 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/ServiceFormController.java 2010-07-21 15:27:32 UTC (rev 113) @@ -23,18 +23,32 @@ @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); - serviceData = (ServiceData) arg.get("serviceData"); + ServiceData data = (ServiceData) arg.get("serviceData"); + if (data != null) { + initService(data); + } DataBinder binder = new AnnotateDataBinder(comp); binder.bindBean("composer", this); binder.loadAll(); } + protected void initService(ServiceData data) { + String id = data.getService().getAddress(); + Address address = model.retrieveAddressById(id); + if (address != null) { + data.setAddress(address); + } + serviceData = data; + } + /* * Events */ public void onClick$saveService() { Address address = model.createAddress(serviceData.getAddress()); serviceData.getService().setAddress(address.getWikittyId()); + serviceData.setAddress(address); + Service service = model.updateService(serviceData.getService()); serviceData.setService(service); Added: trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/WikittyModel.java =================================================================== --- trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/WikittyModel.java (rev 0) +++ trunk/bonzoms-ui-zk/src/main/java/org/chorem/bonzoms/ui/WikittyModel.java 2010-07-21 15:27:32 UTC (rev 113) @@ -0,0 +1,56 @@ +package org.chorem.bonzoms.ui; + +import java.util.ArrayList; +import java.util.List; +import org.nuiton.wikitty.Wikitty; +import org.zkoss.zkplus.databind.BindingListModel; +import org.zkoss.zul.AbstractListModel; +import org.zkoss.zul.event.ListDataEvent; + +/** + * + * @author bbrossaud + */ +public class WikittyModel extends AbstractListModel implements BindingListModel { + + protected List<Wikitty> wikitties = new ArrayList<Wikitty>(); + + @Override + public Object getElementAt(int index) { + return wikitties.get(index); + } + + @Override + public int getSize() { + return wikitties.size(); + } + + @Override + public int indexOf(Object obj) { + return wikitties.indexOf(obj); + } + + public void setWikitties(List<Wikitty> companies) { + wikitties = companies; + fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1); + } + + public void addData(Wikitty newData) { + wikitties.add(newData); + fireEvent(ListDataEvent.INTERVAL_ADDED, wikitties.size() - 1, wikitties.size() - 1); + } + + public void removeData(Wikitty data) { + int interval = wikitties.indexOf(data); + wikitties.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/addressFormPage.zul =================================================================== --- trunk/bonzoms-ui-zk/src/main/webapp/addressFormPage.zul (rev 0) +++ trunk/bonzoms-ui-zk/src/main/webapp/addressFormPage.zul 2010-07-21 15:27:32 UTC (rev 113) @@ -0,0 +1,31 @@ +<?page id="AddressForm" title="Address form" cacheable="false" language="xul/html" zscriptLanguage="Java"?> +<?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> + +<window closable="true" maximizable="true" sizable="true" height="500px" width="400" contentStyle="overflow:auto" apply="org.chorem.bonzoms.ui.AddressFormController"> + <caption label="Address"/> + <groupbox> + <caption label="@{composer.address.name}" /> + <vbox> + + <label value="Name" /> + <textbox value="@{composer.address.name, save-when='saveCompany.onClick'}" /> + + <label value="Adress1" /> + <textbox value="@{composer.address.address1, save-when='saveCompany.onClick'}" /> + + <label value="Adress2" /> + <textbox value="@{composer.address.address2, save-when='saveCompany.onClick'}" /> + + <label value="Zip code" /> + <textbox value="@{composer.address.zipCode, save-when='saveCompany.onClick'}" /> + + <label value="City" /> + <textbox value="@{composer.address.city, save-when='saveCompany.onClick'}" /> + + <label value="Country" /> + <textbox value="@{composer.address.country, save-when='saveCompany.onClick'}" /> + + </vbox> + </groupbox> + <button id="saveAddress" label="Save" /> +</window> \ No newline at end of file Modified: trunk/bonzoms-ui-zk/src/main/webapp/contractFormPage.zul =================================================================== --- trunk/bonzoms-ui-zk/src/main/webapp/contractFormPage.zul 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/webapp/contractFormPage.zul 2010-07-21 15:27:32 UTC (rev 113) @@ -2,70 +2,45 @@ <?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> <window closable="true" maximizable="true" sizable="true" height="400px" width="450px" contentStyle="overflow:auto" apply="org.chorem.bonzoms.ui.ContractFormController"> -<caption label="Contract"/> - <groupbox> - <caption label="Contracts informations" /> + <caption label="@{composer.contract.type}" /> <hbox> <vbox> - <listbox id="contractListbox" model="@{composer.contractsModel}" width="400px"> - <listitem self="@{each='contract'}"> - <listcell> - <groupbox> - <caption label="@{contract.type}" /> + <label value="Type" /> + <textbox value="@{composer.contract.type, save-when='save.onClick'}" /> - <hbox> + <label value="Salary" /> + <doublebox value="@{composer.contract.salary, save-when='save.onClick'}" /> - <vbox> + <label value="Working time" /> + <textbox value="@{composer.contract.workingTime, save-when='save.onClick'}" /> - <label value="Type" /> - <textbox value="@{contract.type, save-when='save.onClick'}" /> + <label value="Advantages" /> + <textbox value="@{composer.contract.advantages, save-when='save.onClick'}" /> - <label value="Salary" /> - <doublebox value="@{contract.salary, save-when='save.onClick'}" /> + </vbox> - <label value="Working time" /> - <textbox value="@{contract.workingTime, save-when='save.onClick'}" /> + <space /> - <label value="Advantages" /> - <textbox value="@{contract.advantages, save-when='save.onClick'}" /> + <vbox> + <label value="Name" /> + <textbox value="@{composer.contract.name, save-when='save.onClick'}" /> - </vbox> + <label value="Start" /> + <datebox format="yyyy/MM/dd" value="@{composer.contract.start, save-when='save.onClick'}" /> - <space /> + <label value="End" /> + <datebox format="yyyy/MM/dd" value="@{composer.contract.end, save-when='save.onClick'}" /> - <vbox> - <label value="Name" /> - <textbox value="@{contract.name, save-when='save.onClick'}" /> + <label value="Description" /> + <textbox rows="5" value="@{composer.contract.description, save-when='save.onClick'}" /> - <label value="Start" /> - <datebox format="yyyy/MM/dd" value="@{contract.start, save-when='save.onClick'}" /> - - <label value="End" /> - <datebox format="yyyy/MM/dd" value="@{contract.end, save-when='save.onClick'}" /> - - <label value="Description" /> - <textbox rows="5" value="@{contract.description, save-when='save.onClick'}" /> - - </vbox> - - </hbox> - </groupbox> - </listcell> - </listitem> - </listbox> - <hbox> - <button label="Add contract" id="addContract" /> - <button label="Delete contract" id="deleteContract" /> - </hbox> - </vbox> </hbox> </groupbox> - <button id="save" label="save" /> - + <button id="saveContract" label="Save" /> </window> \ No newline at end of file Copied: trunk/bonzoms-ui-zk/src/main/webapp/contractsFormPage.zul (from rev 108, trunk/bonzoms-ui-zk/src/main/webapp/contractFormPage.zul) =================================================================== --- trunk/bonzoms-ui-zk/src/main/webapp/contractsFormPage.zul (rev 0) +++ trunk/bonzoms-ui-zk/src/main/webapp/contractsFormPage.zul 2010-07-21 15:27:32 UTC (rev 113) @@ -0,0 +1,71 @@ +<?page id="ContractsForm" title="Contracts form" cacheable="false" language="xul/html" zscriptLanguage="Java"?> +<?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> + +<window closable="true" maximizable="true" sizable="true" height="400px" width="450px" contentStyle="overflow:auto" apply="org.chorem.bonzoms.ui.ContractsFormController"> +<caption label="Contracts"/> + + <groupbox> + <caption label="Contracts informations" /> + + <hbox> + + <vbox> + + <listbox id="contractListbox" model="@{composer.contractsModel}" width="400px"> + <listitem self="@{each='contract'}"> + <listcell> + <groupbox> + <caption label="@{contract.type}" /> + + <hbox> + + <vbox> + + <label value="Type" /> + <textbox value="@{contract.type, save-when='save.onClick'}" /> + + <label value="Salary" /> + <doublebox value="@{contract.salary, save-when='save.onClick'}" /> + + <label value="Working time" /> + <textbox value="@{contract.workingTime, save-when='save.onClick'}" /> + + <label value="Advantages" /> + <textbox value="@{contract.advantages, save-when='save.onClick'}" /> + + </vbox> + + <space /> + + <vbox> + <label value="Name" /> + <textbox value="@{contract.name, save-when='save.onClick'}" /> + + <label value="Start" /> + <datebox format="yyyy/MM/dd" value="@{contract.start, save-when='save.onClick'}" /> + + <label value="End" /> + <datebox format="yyyy/MM/dd" value="@{contract.end, save-when='save.onClick'}" /> + + <label value="Description" /> + <textbox rows="5" value="@{contract.description, save-when='save.onClick'}" /> + + </vbox> + + </hbox> + </groupbox> + </listcell> + </listitem> + </listbox> + <hbox> + <button label="Add contract" id="addContract" /> + <button label="Delete contract" id="deleteContract" /> + </hbox> + + </vbox> + + </hbox> + </groupbox> + <button id="save" label="Save" /> + +</window> \ No newline at end of file Modified: trunk/bonzoms-ui-zk/src/main/webapp/resultPage.zul =================================================================== --- trunk/bonzoms-ui-zk/src/main/webapp/resultPage.zul 2010-07-21 09:53:51 UTC (rev 112) +++ trunk/bonzoms-ui-zk/src/main/webapp/resultPage.zul 2010-07-21 15:27:32 UTC (rev 113) @@ -3,5 +3,13 @@ <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="result"?> <window id="result" apply="org.chorem.bonzoms.ui.ResultController"> - toto + <listbox autopaging="true" mold="paging" id="wikittyListBox" rows="20" model="@{result$composer.wikittyModel}" + itemRenderer="@{result$composer.wikittyRenderer}"> + <listhead> + <listheader label="id" /> + <listheader label="Extensions" /> + <listheader label="Values" /> + <listheader label="Details" /> + </listhead> + </listbox> </window> \ No newline at end of file