Java tutorial
/* * Copyright 2010, 2011 Renaud Brub * * This file is part of PIGE. * * PIGE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PIGE 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PIGE. If not, see <http://www.gnu.org/licenses/>. */ package ca.qc.cegepoutaouais.tge.pige.client.ui.dialog; import ca.qc.cegepoutaouais.tge.pige.client.ItemStatus; import ca.qc.cegepoutaouais.tge.pige.client.ItemStatus.ItemStatusModel; import ca.qc.cegepoutaouais.tge.pige.client.PIGE; import ca.qc.cegepoutaouais.tge.pige.client.services.ManagementServiceAsync; import ca.qc.cegepoutaouais.tge.pige.client.ui.AppEvents; import ca.qc.cegepoutaouais.tge.pige.client.ui.AppWidgets; import ca.qc.cegepoutaouais.tge.pige.client.ui.widget.CategoryBrowser; import ca.qc.cegepoutaouais.tge.pige.client.ui.widget.EditorMode; import ca.qc.cegepoutaouais.tge.pige.client.ui.widget.StatusBar; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.Category; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.Item; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.Maintenance; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.Role; import com.extjs.gxt.ui.client.Registry; import com.extjs.gxt.ui.client.Style.SelectionMode; import com.extjs.gxt.ui.client.data.BeanModel; import com.extjs.gxt.ui.client.data.BeanModelFactory; import com.extjs.gxt.ui.client.data.BeanModelLookup; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.data.ModelProcessor; import com.extjs.gxt.ui.client.data.TreeModel; import com.extjs.gxt.ui.client.dnd.DND.Operation; import com.extjs.gxt.ui.client.dnd.ListViewDropTarget; import com.extjs.gxt.ui.client.dnd.TreeGridDragSource; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.DNDEvent; import com.extjs.gxt.ui.client.event.DNDListener; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.FieldEvent; import com.extjs.gxt.ui.client.event.KeyListener; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MenuEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.mvc.AppEvent; import com.extjs.gxt.ui.client.mvc.Dispatcher; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.store.StoreEvent; import com.extjs.gxt.ui.client.store.StoreListener; import com.extjs.gxt.ui.client.widget.Html; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.TabItem; import com.extjs.gxt.ui.client.widget.TabPanel; import com.extjs.gxt.ui.client.widget.form.AdapterField; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; import com.extjs.gxt.ui.client.widget.form.DateField; import com.extjs.gxt.ui.client.widget.form.FormPanel; import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign; import com.extjs.gxt.ui.client.widget.form.ListField; import com.extjs.gxt.ui.client.widget.form.NumberField; import com.extjs.gxt.ui.client.widget.form.TextArea; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.layout.BoxLayout.BoxLayoutPack; import com.extjs.gxt.ui.client.widget.layout.ColumnData; import com.extjs.gxt.ui.client.widget.layout.ColumnLayout; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.FormData; import com.extjs.gxt.ui.client.widget.layout.FormLayout; import com.extjs.gxt.ui.client.widget.layout.VBoxLayout; import com.extjs.gxt.ui.client.widget.layout.VBoxLayout.VBoxLayoutAlign; import com.extjs.gxt.ui.client.widget.menu.HeaderMenuItem; import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; /** * * @author Renaud Brub */ public class ItemCEVDialog extends AbstractCEVDialog { Timer nameAutoCompleteTimer = new Timer() { @Override public void run() { ManagementServiceAsync rpcService = (ManagementServiceAsync) Registry.get(PIGE.MANAGEMENT_SERVICE); rpcService.getItemNameSuggestion(nameTF.getValue(), new AsyncCallback<String>() { @Override public void onSuccess(String result) { if (result == null) { return; } String start = nameTF.getValue(); if (start.length() <= 0) { return; } int len = start.length(); nameTF.setValue(result); nameTF.setSelectionRange(len, result.length()); } @Override public void onFailure(Throwable caught) { // Silent. } }); } }; protected TextField<String> nameTF = null; protected TextField<String> serialNumberTF = null; protected TextField<String> modelTF = null; protected TextField<String> versionTF = null; protected NumberField quantityNF = null; protected TextField<String> locationTF = null; protected ComboBox typeCBx = null; protected ComboBox<ItemStatusModel> statusCBx = null; protected ListStore<ItemStatusModel> statusListStore = null; protected DateField creationDateDF = null; protected DateField receptionDateDF = null; protected DateField endOfLifeDateDF = null; protected TextArea descriptionTA = null; protected TextArea dataSheetTA = null; protected ListField<BeanModel> selectedCategoriesLF = null; protected AdapterField catEditorAF = null; protected TextArea reqPOTA = null; protected TextArea supplierTA = null; protected TextArea internetAddress = null; protected TextArea otherOrderInfos = null; protected ListViewDropTarget listViewDT = null; protected TreeGridDragSource treeGridDS = null; protected ListField<BeanModel> maintenancesLF = null; protected ListStore<BeanModel> maintenanceStore = null; private long typeTimestamp = 0; protected long autoCompleteDelay = 3000; // 3 secondes. //public ItemCEVDialog() { // setupUI(); //} public ItemCEVDialog(CEV cevType) { super(cevType); setupUI(); } protected void setupUI() { // Configurations de la bote de dialogue. setLayout(new FitLayout()); setModal(true); setDraggable(true); setCollapsible(false); setClosable(true); setAutoHide(false); setResizable(false); setBodyStyle("padding: 3px"); setWidth(600); setHeight(500); TabPanel tabPanel = new TabPanel(); tabPanel.add(createIdentificationTab()); tabPanel.add(createCategoriesTab()); Role role = Registry.get(PIGE.ROLE_OBJECT); if (role.getManageInventory()) { tabPanel.add(createOrderInfosTab()); if (cevType.equals(CEV.VIEW)) { tabPanel.add(createMaintenancesTab()); } } add(tabPanel); } protected TabItem createIdentificationTab() { TabItem tab = new TabItem(messages.identification()); FormPanel formPanel = new FormPanel(); formPanel.setHeaderVisible(false); formPanel.setBodyBorder(false); FormData formData = new FormData("100%"); tab.add(formPanel); LayoutContainer topPanel = new LayoutContainer(); topPanel.setLayout(new ColumnLayout()); formPanel.add(topPanel, formData); LayoutContainer leftPanel = new LayoutContainer(); FormLayout formLayout = new FormLayout(); formLayout.setLabelAlign(LabelAlign.TOP); leftPanel.setLayout(formLayout); leftPanel.setStyleAttribute("padding-right", "18px"); LayoutContainer rightPanel = new LayoutContainer(); rightPanel.setStyleAttribute("padding-right", "18px"); formLayout = new FormLayout(); formLayout.setLabelAlign(LabelAlign.TOP); rightPanel.setLayout(formLayout); topPanel.add(leftPanel, new ColumnData(.5)); topPanel.add(rightPanel, new ColumnData(.5)); LayoutContainer bottomPanel = new LayoutContainer(); formLayout = new FormLayout(); formLayout.setLabelAlign(LabelAlign.TOP); bottomPanel.setLayout(formLayout); formPanel.add(bottomPanel, formData); KeyListener keyListener = new KeyListener() { @Override public void componentKeyUp(ComponentEvent event) { validate(); } }; nameTF = new TextField<String>(); nameTF.setFieldLabel(messages.name()); nameTF.addKeyListener(keyListener); nameTF.setAllowBlank(Boolean.FALSE); nameTF.setMaxLength(100); nameTF.setEmptyText(messages.requiredField()); nameTF.addKeyListener(new KeyListener() { @Override public void componentKeyUp(ComponentEvent event) { int key = event.getKeyCode(); nameAutoCompleteTimer.cancel(); if (key < 0x40 || key > 0x7E) { return; } nameAutoCompleteTimer.schedule(1000); } }); serialNumberTF = new TextField<String>(); serialNumberTF.setFieldLabel(messages.serialNumber()); serialNumberTF.setMaxLength(50); serialNumberTF.addKeyListener(keyListener); modelTF = new TextField<String>(); modelTF.setFieldLabel(messages.model()); modelTF.setMaxLength(50); modelTF.addKeyListener(keyListener); versionTF = new TextField<String>(); versionTF.setFieldLabel(messages.version()); versionTF.setMaxLength(30); versionTF.addKeyListener(keyListener); quantityNF = new NumberField(); quantityNF.setFormat(NumberFormat.getFormat(PIGE.QUANTITY_FORMAT)); quantityNF.setPropertyEditorType(Integer.class); quantityNF.setAllowBlank(Boolean.FALSE); quantityNF.setAllowDecimals(Boolean.FALSE); quantityNF.setAllowNegative(Boolean.FALSE); quantityNF.setMaxLength(9); quantityNF.setFieldLabel(messages.quantity()); quantityNF.setEmptyText(messages.requiredField()); quantityNF.addKeyListener(keyListener); locationTF = new TextField<String>(); locationTF.setFieldLabel(messages.location()); locationTF.setMaxLength(255); locationTF.setEmptyText(messages.requiredField()); locationTF.setAllowBlank(Boolean.FALSE); locationTF.addKeyListener(keyListener); statusListStore = new ListStore<ItemStatusModel>(); statusCBx = new ComboBox<ItemStatusModel>(); statusCBx.setStore(statusListStore); statusCBx.setFieldLabel(messages.status()); statusCBx.setEmptyText(messages.requiredField()); statusCBx.setAllowBlank(Boolean.FALSE); statusCBx.setForceSelection(true); statusCBx.setEditable(false); statusCBx.setDisplayField("label"); statusCBx.setTriggerAction(TriggerAction.ALL); statusCBx.addListener(Events.Select, new Listener<FieldEvent>() { @Override public void handleEvent(FieldEvent event) { validate(); } }); DateTimeFormat dtf = DateTimeFormat.getFormat(PIGE.TERM_DATE_FORMAT); creationDateDF = new DateField(); creationDateDF.setFieldLabel(messages.creationDate()); creationDateDF.setReadOnly(Boolean.TRUE); creationDateDF.setFormatValue(Boolean.TRUE); creationDateDF.getPropertyEditor().setFormat(dtf); creationDateDF.setEditable(Boolean.FALSE);//Test creationDateDF.setHideTrigger(Boolean.TRUE); receptionDateDF = new DateField(); receptionDateDF.setFieldLabel(messages.receptionDate()); receptionDateDF.setFormatValue(Boolean.TRUE); receptionDateDF.setEditable(Boolean.FALSE); receptionDateDF.getPropertyEditor().setFormat(dtf); endOfLifeDateDF = new DateField(); endOfLifeDateDF.setFieldLabel(messages.endOfLifeDate()); endOfLifeDateDF.setFormatValue(Boolean.TRUE); endOfLifeDateDF.setEditable(Boolean.FALSE); endOfLifeDateDF.getPropertyEditor().setFormat(dtf); dataSheetTA = new TextArea(); dataSheetTA.setFieldLabel(messages.dataSheets()); dataSheetTA.setHeight(40); dataSheetTA.addKeyListener(keyListener); descriptionTA = new TextArea(); descriptionTA.setFieldLabel(messages.description()); descriptionTA.setHeight(90); descriptionTA.addKeyListener(keyListener); leftPanel.add(nameTF, formData); leftPanel.add(locationTF, formData); leftPanel.add(modelTF, formData); leftPanel.add(versionTF, formData); leftPanel.add(receptionDateDF, formData); rightPanel.add(quantityNF, formData); rightPanel.add(statusCBx, formData); rightPanel.add(serialNumberTF, formData); rightPanel.add(creationDateDF, formData); rightPanel.add(endOfLifeDateDF, formData); bottomPanel.add(dataSheetTA, formData); bottomPanel.add(descriptionTA, formData); statusListStore.add(ItemStatus.getInstance().getModelList()); return tab; } protected TabItem createCategoriesTab() { TabItem tab = new TabItem(messages.categories()); FormPanel formPanel = new FormPanel(); formPanel.setHeaderVisible(false); formPanel.setBodyBorder(false); tab.add(formPanel); LayoutContainer mainPanel = new LayoutContainer(); mainPanel.setLayout(new ColumnLayout()); FormData formData = new FormData("100%"); formPanel.add(mainPanel, formData); formPanel.add(new Html(messages.contextualMenuTip()), formData); LayoutContainer leftPanel = new LayoutContainer(); FormLayout formLayout = new FormLayout(); formLayout.setLabelAlign(LabelAlign.TOP); leftPanel.setLayout(formLayout); leftPanel.setStyleAttribute("padding-right", "5px"); LayoutContainer middlePanel = new LayoutContainer(); VBoxLayout layout = new VBoxLayout(); layout.setVBoxLayoutAlign(VBoxLayoutAlign.CENTER); layout.setPack(BoxLayoutPack.CENTER); middlePanel.setLayout(layout); LayoutContainer rightPanel = new LayoutContainer(); rightPanel.setStyleAttribute("padding-left", "5px"); formLayout = new FormLayout(); formLayout.setLabelAlign(LabelAlign.TOP); rightPanel.setLayout(formLayout); mainPanel.add(leftPanel, new ColumnData(.45)); mainPanel.add(middlePanel, new ColumnData(10)); mainPanel.add(rightPanel, new ColumnData(.55)); middlePanel.setHeight(350); middlePanel.addText(">"); Role role = Registry.get(PIGE.ROLE_OBJECT); EditorMode mode = EditorMode.ReadOnly; if (role.getManageInventory() && cevType != CEV.VIEW) { mode = EditorMode.Normal; } CategoryBrowser catBrowser = new CategoryBrowser(mode); catBrowser.setIncludeUnclassifiedCategory(Boolean.FALSE); catBrowser.setShowItemCount(Boolean.FALSE); TreeGrid treeGrid = catBrowser.getTreeGrid(); treeGrid.setHeight(337); treeGridDS = new TreeGridDragSource(treeGrid); treeGrid.getTreeStore().addStoreListener(new StoreListener<BeanModel>() { @Override public void storeUpdate(StoreEvent<BeanModel> event) { super.storeUpdate(event); selectedCategoriesLF.getStore().update(event.getModel()); } }); catEditorAF = new AdapterField(catBrowser); catEditorAF.setHideLabel(Boolean.TRUE); selectedCategoriesLF = new ListField<BeanModel>(); selectedCategoriesLF.setHeight(340); selectedCategoriesLF.setStore(new ListStore<BeanModel>()); selectedCategoriesLF.getListView().getSelectionModel().setSelectionMode(SelectionMode.SINGLE); selectedCategoriesLF.setDisplayField("view"); selectedCategoriesLF.setFieldLabel(messages.classification()); selectedCategoriesLF.getListView().setModelProcessor(new ModelProcessor<BeanModel>() { @Override public BeanModel prepareData(BeanModel model) { Category c = model.<Category>getBean(); StringBuilder b = new StringBuilder(); b.append("<span qtip='").append(c.getPath()).append("'>").append(c.getPath()).append("</span>"); model.set("view", b.toString()); return model; } }); if (mode == EditorMode.Normal) { selectedCategoriesLF.addKeyListener(new KeyListener() { @Override public void componentKeyUp(ComponentEvent event) { if (event.getKeyCode() == KeyCodes.KEY_DELETE) { BeanModel selection = selectedCategoriesLF.getListView().getSelectionModel() .getSelectedItem(); if (selection != null) { selectedCategoriesLF.getStore().remove(selection); } } } }); if (cevType != CEV.VIEW) { Menu contextMenu = new Menu(); contextMenu.add(new HeaderMenuItem(messages.classificationMenu())); MenuItem deleteCategoryBtn = new MenuItem(messages.delete()); deleteCategoryBtn.addSelectionListener(new SelectionListener<MenuEvent>() { @Override public void componentSelected(MenuEvent event) { BeanModel selection = selectedCategoriesLF.getListView().getSelectionModel() .getSelectedItem(); if (selection != null) { selectedCategoriesLF.getStore().remove(selection); } } }); contextMenu.add(deleteCategoryBtn); selectedCategoriesLF.setContextMenu(contextMenu); } } listViewDT = new ListViewDropTarget(selectedCategoriesLF.getListView()) { @Override protected void onDragDrop(DNDEvent e) { List<TreeModel> list = e.getData(); BeanModel model = (BeanModel) list.iterator().next().get("model"); if (categoryExists(model)) { e.setCancelled(Boolean.TRUE); } else { super.onDragDrop(e); } } }; listViewDT.setOperation(Operation.COPY); listViewDT.addDNDListener(new DNDListener() { @Override public void dragEnter(DNDEvent e) { List<TreeModel> list = e.getData(); BeanModel model = (BeanModel) list.iterator().next().get("model"); if (categoryExists(model)) { e.getStatus().setStatus(Boolean.FALSE); e.setCancelled(Boolean.TRUE); } else { super.dragEnter(e); } } }); leftPanel.add(catEditorAF, formData); rightPanel.add(selectedCategoriesLF, formData); return tab; } protected TabItem createMaintenancesTab() { TabItem tab = new TabItem(messages.maintenances()); maintenancesLF = new ListField<BeanModel>(); maintenancesLF.setFieldLabel(messages.affectedByFollowingMaintenances()); maintenancesLF.getListView().getSelectionModel().setSelectionMode(SelectionMode.SINGLE); maintenancesLF.setDisplayField("name"); maintenanceStore = new ListStore(); maintenancesLF.setStore(maintenanceStore); maintenancesLF.setHeight(340); maintenancesLF.getListView().addListener(Events.OnDoubleClick, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { viewMaintenance(); }; }); FormPanel formPanel = new FormPanel(); formPanel.setHeaderVisible(false); formPanel.setBodyBorder(false); formPanel.setLabelAlign(LabelAlign.TOP); FormData formData = new FormData("100%"); formPanel.add(maintenancesLF, formData); formPanel.add(new Html(messages.contextualMenuTip()), formData); tab.add(formPanel); Menu menu = new Menu(); menu.add(new HeaderMenuItem(messages.maintenanceMenu())); MenuItem viewMaintenanceMenu = new MenuItem(messages.view() + PIGE.DIALOG_OPENER_INDICATOR); viewMaintenanceMenu.addSelectionListener(new SelectionListener() { @Override public void componentSelected(ComponentEvent ce) { viewMaintenance(); } }); menu.add(viewMaintenanceMenu); maintenancesLF.setContextMenu(menu); return tab; } protected TabItem createOrderInfosTab() { TabItem tab = new TabItem(messages.orderInfos()); FormPanel formPanel = new FormPanel(); formPanel.setLabelAlign(LabelAlign.TOP); formPanel.setHeaderVisible(false); formPanel.setBodyBorder(false); tab.add(formPanel); FormData formData = new FormData("100%"); reqPOTA = new TextArea(); reqPOTA.setFieldLabel(messages.requisitionPONumber()); reqPOTA.setHeight(75); supplierTA = new TextArea(); supplierTA.setFieldLabel(messages.supplier()); supplierTA.setHeight(75); internetAddress = new TextArea(); internetAddress.setFieldLabel(messages.internetAddresses()); internetAddress.setHeight(75); otherOrderInfos = new TextArea(); otherOrderInfos.setFieldLabel(messages.otherInformation()); otherOrderInfos.setHeight(70); formPanel.add(reqPOTA, formData); formPanel.add(supplierTA, formData); formPanel.add(internetAddress, formData); formPanel.add(otherOrderInfos, formData); return tab; } protected void viewMaintenance() { List<BeanModel> selection = maintenancesLF.getSelection(); if (selection.size() > 0) { MaintenanceCEVDialog dialog = new MaintenanceCEVDialog(CEV.VIEW); dialog.setData("maintenance", (Maintenance) selection.get(0).getBean()); dialog.showDialog(); } else { MessageBox.info(messages.information(), messages.noMaintenanceSelected(), null); } } protected Boolean categoryExists(BeanModel category) { ListStore store = selectedCategoriesLF.getStore(); List<ModelData> models = store.getModels(); BeanModel model; for (ModelData md : models) { model = (BeanModel) md; if (((String) category.get("path")).equals(model.get("path"))) { return Boolean.TRUE; } } return Boolean.FALSE; } @Override protected void initialize() { if (cevType == CEV.CREATE || cevType == CEV.COPY) { creationDateDF.setValue(new Date()); if (cevType == CEV.CREATE) { //statusCBx.setValue(statusCBx.getStore().findModel( // ItemStatus.getInstance().getModel( // ItemStatus.STATUS_IN_STOCK).getValue())); /* * Slectionner l'tat de la liste droulante correspondant l'tat * 'En stock'. */ ListStore<ItemStatusModel> store = statusCBx.getStore(); int listSize = store.getCount(); ItemStatusModel model; for (int i = 0; i < listSize; ++i) { model = store.getAt(i); if (model.getValue().equalsIgnoreCase(ItemStatus.STATUS_IN_STOCK)) { statusCBx.setValue(model); break; } } } } } @Override protected void clearFields() { nameTF.clear(); serialNumberTF.clear(); modelTF.clear(); versionTF.clear(); quantityNF.clear(); locationTF.clear(); receptionDateDF.clear(); endOfLifeDateDF.clear(); dataSheetTA.clear(); descriptionTA.clear(); selectedCategoriesLF.clear(); Role role = Registry.get(PIGE.ROLE_OBJECT); if (role.getManageInventory()) { if (cevType.equals(CEV.VIEW)) { maintenancesLF.clear(); } reqPOTA.clear(); supplierTA.clear(); internetAddress.clear(); otherOrderInfos.clear(); } } @Override protected void fillFields() { Item item = getData("item"); if (item != null) { nameTF.setValue(item.getName()); serialNumberTF.setValue(item.getSerialNumber()); modelTF.setValue(item.getModel()); versionTF.setValue(item.getVersion()); quantityNF.setValue(item.getQuantity()); locationTF.setValue(item.getLocation()); creationDateDF.setValue(item.getCreationDate()); receptionDateDF.setValue(item.getReceptionDate()); endOfLifeDateDF.setValue(item.getEndOfLifeDate()); dataSheetTA.setValue(item.getDataSheet()); descriptionTA.setValue(item.getDescription()); Role role = Registry.get(PIGE.ROLE_OBJECT); if (role.getManageInventory()) { if (cevType.equals(CEV.VIEW)) { Set<Maintenance> maintenances = item.getMaintenances(); if (maintenances != null) { BeanModelFactory factory = BeanModelLookup.get().getFactory(Maintenance.class); ListStore maintStore = maintenancesLF.getStore(); maintStore.removeAll(); for (Maintenance m : maintenances) { maintStore.add(factory.createModel(m)); } } } reqPOTA.setValue(item.getReqPONumbers()); supplierTA.setValue(item.getSuppliers()); internetAddress.setValue(item.getInternetAddresses()); otherOrderInfos.setValue(item.getOtherOrderInfos()); } /* * Slectionner l'tat de la liste droulante correspondant l'tat * de l'item. */ String itemStatus = item.getStatus(); ListStore<ItemStatusModel> store = statusCBx.getStore(); int listSize = store.getCount(); ItemStatusModel model; for (int i = 0; i < listSize; ++i) { model = store.getAt(i); if (model.getValue().equalsIgnoreCase(itemStatus)) { statusCBx.setValue(model); break; } } Set<Category> categories = item.getCategories(); if (categories != null) { BeanModelFactory factory = BeanModelLookup.get().getFactory(Category.class); ListStore categoryStore = selectedCategoriesLF.getStore(); categoryStore.removeAll(); for (Category c : categories) { categoryStore.add(factory.createModel(c)); } } } } @Override protected void setReadOnly(Boolean b) { nameTF.setReadOnly(b); serialNumberTF.setReadOnly(b); modelTF.setReadOnly(b); versionTF.setReadOnly(b); quantityNF.setReadOnly(b); locationTF.setReadOnly(b); statusCBx.setReadOnly(b); receptionDateDF.setReadOnly(b); endOfLifeDateDF.setReadOnly(b); dataSheetTA.setReadOnly(b); descriptionTA.setReadOnly(b); selectedCategoriesLF.setReadOnly(b); if (b) { listViewDT.disable(); } else { listViewDT.enable(); } catEditorAF.setReadOnly(b); if (b) { treeGridDS.disable(); } else { treeGridDS.enable(); } Role role = Registry.get(PIGE.ROLE_OBJECT); if (role.getManageInventory()) { reqPOTA.setReadOnly(b); supplierTA.setReadOnly(b); internetAddress.setReadOnly(b); otherOrderInfos.setReadOnly(b); } } @Override protected void setupWindow() { if (cevType.equals(CEV.VIEW)) { setHeadingText(messages.viewItem() + " (" + messages.readOnly() + ")"); } else if (cevType.equals(CEV.EDIT)) { setHeadingText(messages.editItem()); } else if (cevType.equals(CEV.CREATE)) { setHeadingText(messages.createItem()); } else if (cevType.equals(CEV.COPY)) { setHeadingText(messages.createItem()); } } @Override protected void validate() { if (cevType.equals(CEV.VIEW)) { return; } boolean isValid = hasValue(nameTF) && hasValue(locationTF) && quantityNF.validate() && statusCBx.getRawValue() != null && !statusCBx.getRawValue().isEmpty(); if (cevType.equals(CEV.CREATE) || cevType.equals(CEV.COPY)) { createBtn.setEnabled(isValid); } else { updateBtn.setEnabled(isValid); } } @Override protected void showHelp() { MessageBox.info(messages.information(), messages.itemDialogHelp(), null); } protected Item buildItem(Item baseItem) { baseItem.setName(nameTF.getValue()); baseItem.setSerialNumber(serialNumberTF.getValue()); baseItem.setModel(modelTF.getValue()); baseItem.setVersion(versionTF.getValue()); baseItem.setQuantity((Integer) quantityNF.getValue()); baseItem.setLocation(locationTF.getValue()); baseItem.setCreationDate(creationDateDF.getValue()); baseItem.setReceptionDate(receptionDateDF.getValue()); baseItem.setEndOfLifeDate(endOfLifeDateDF.getValue()); baseItem.setDataSheet(dataSheetTA.getValue()); baseItem.setDescription(descriptionTA.getValue()); baseItem.setStatus(statusCBx.getValue().getValue()); baseItem.setReqPONumbers(reqPOTA.getValue()); baseItem.setSuppliers(supplierTA.getValue()); baseItem.setInternetAddresses(internetAddress.getValue()); baseItem.setOtherOrderInfos(otherOrderInfos.getValue()); Set categories = new HashSet(); List<BeanModel> list = selectedCategoriesLF.getStore().getModels(); for (BeanModel bm : list) { categories.add((Category) bm.getBean()); } baseItem.setCategories(categories); return baseItem; } @Override protected void create() { // Nouvel item sans id. Item item = buildItem(new Item()); // Envoyer la demande de cration de compte au serveur. ManagementServiceAsync rpcService = Registry.get(PIGE.MANAGEMENT_SERVICE); rpcService.createItem(item, new AsyncCallback() { @Override public void onSuccess(Object o) { clearFields(); validate(); StatusBar statusBar = Registry.get(AppWidgets.APP_STATUS_BAR); statusBar.setTimedText(messages.itemCreatedSuccessfully()); setFocusWidget(nameTF); Dispatcher.get().dispatch(AppEvents.INVENTORY_MANAGEMENT_UPDATE_EVENT); } @Override public void onFailure(Throwable caught) { PIGE.handleException(caught); } }); } @Override protected void update() { // Rcuprer l'item avec un id valide. Item item = buildItem((Item) getData("item")); final List<BeanModel> models = selectedCategoriesLF.getStore().getModels(); // Envoyer la demande de cration de compte au serveur. ManagementServiceAsync rpcService = Registry.get(PIGE.MANAGEMENT_SERVICE); rpcService.updateItems(Arrays.asList(item), new AsyncCallback() { @Override public void onSuccess(Object o) { StatusBar statusBar = Registry.get(AppWidgets.APP_STATUS_BAR); statusBar.setTimedText(messages.updateSuccessful()); setFocusWidget(nameTF); AppEvent event = new AppEvent(AppEvents.INVENTORY_MANAGEMENT_UPDATE_EVENT); event.setData("category-update", models); Dispatcher.get().dispatch(event); } @Override public void onFailure(Throwable caught) { PIGE.handleException(caught); } }); } protected String autoCompleteResult = null; protected void setAutoCompleteResult(String result) { autoCompleteResult = result; } protected String getAutoCompleteResult() { return autoCompleteResult; } protected void queryAutoCompleteResult() { ManagementServiceAsync rpcService = (ManagementServiceAsync) Registry.get(PIGE.MANAGEMENT_SERVICE); rpcService.getItemNameSuggestion(nameTF.getValue(), new AsyncCallback<String>() { @Override public void onSuccess(String result) { //if (result == null) { // return; //} //String start = nameTF.getValue(); //if (start.length() <= 0) { // return; //} //int len = start.length(); //nameTF.setValue(result); //nameTF.setSelectionRange(len, result.length()); setAutoCompleteResult(result); } @Override public void onFailure(Throwable caught) { // Silent. } }); } }