package com.thingtrack.konekti.view.web.form.field; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceReference; import org.vaadin.peter.buttongroup.ButtonGroup; import com.thingtrack.konekti.domain.Supplier; import com.thingtrack.konekti.service.api.SupplierService; import com.thingtrack.konekti.view.addon.ui.AbstractField; import com.thingtrack.konekti.view.addon.ui.WindowDialog; import com.thingtrack.konekti.view.addon.ui.WindowDialog.DialogResult; import com.thingtrack.konekti.view.kernel.IWorkbenchContext; import com.thingtrack.konekti.view.web.form.SupplierViewForm; import com.thingtrack.konekti.view.web.form.selector.SupplierSelectorWindow; import com.vaadin.annotations.AutoGenerated; import com.vaadin.data.Property; import com.vaadin.terminal.ThemeResource; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.TextField; import com.vaadin.ui.Button.ClickEvent; @SuppressWarnings("serial") public class SupplierSelectorField extends AbstractField { @AutoGenerated private HorizontalLayout mainLayout; @AutoGenerated private Button btnSearchEntity; @AutoGenerated private Button btnClearEntity; @AutoGenerated private Button btnAddEntity; @AutoGenerated private TextField supplierField; /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ private IWorkbenchContext context; private Supplier supplier; private SupplierService supplierService; private boolean searchEntityVisible = true; private boolean clearEntityVisible = true; private boolean addEntityVisible = true; /** * The constructor should first build the main layout, set the * composition root and then do any custom initialization. * * The constructor will not be automatically regenerated by the * visual editor. */ public SupplierSelectorField() { buildMainLayout(); setCompositionRoot(mainLayout); // TODO add user code here getServices(); supplierField.setNullRepresentation(""); supplierField.setRequiredError(supplierField.getCaption() + " es un campo requerido"); btnSearchEntity.addListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { try { @SuppressWarnings("unused") SupplierSelectorWindow windowDialog = new SupplierSelectorWindow(context, getApplication().getMainWindow(), supplier, new SupplierSelectorWindow.CloseWindowDialogListener() { public void windowDialogClose(SupplierSelectorWindow.CloseWindowDialogEvent event) { if (event.getDialogResult() != SupplierSelectorWindow.DialogResult.SELECT) return ; supplier = event.getDomainEntity(); supplierField.setValue(supplier.getName()); } }); } catch (Exception e) { throw new RuntimeException("¡No se pudo abrir el selector de proveedores!", e); } } }); btnClearEntity.addListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { supplier = null; supplierField.setValue(null); } }); btnAddEntity.addListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { Supplier supplier = null; try { supplier = supplierService.createNewSupplier(SupplierSelectorField.this.context.getUser().getActiveOrganization()); } catch (Exception e) { throw new RuntimeException( "¡No se pudo crear el nuevo código proveedor!", e); } try { @SuppressWarnings("unused") WindowDialog<Supplier> windowDialog = new WindowDialog<Supplier>( getApplication().getMainWindow(), "Nuevo Proveedor", "Guardar", DialogResult.SAVE, "Cancelar", DialogResult.CANCEL, new SupplierViewForm(context), supplier, new WindowDialog.CloseWindowDialogListener<Supplier>() { public void windowDialogClose( WindowDialog<Supplier>.CloseWindowDialogEvent<Supplier> event) { if (event.getDialogResult() != WindowDialog.DialogResult.SAVE) return; try { Supplier savingSupplier = event.getDomainEntity(); Supplier savedsupplier = supplierService.save(savingSupplier); savingSupplier.setAgentId(savedsupplier.getAgentId()); supplierField.setValue(savingSupplier.getName()); SupplierSelectorField.this.supplier = savingSupplier; } catch (Exception e) { throw new RuntimeException("¡No se pudo crear el nuevo proveedor!", e); } } }); } catch (IllegalArgumentException e) { throw new RuntimeException("¡No se pudo abrir el formulario Nuevo Proveedor!", e); } catch (Exception e) { throw new RuntimeException("¡No se pudo abrir el formulario Nuevo Proveedor!", e); } } }); btnClearEntity.setVisible(clearEntityVisible); btnAddEntity.setVisible(addEntityVisible); } @Override public void focus() { supplierField.focus(); } @SuppressWarnings({ "unchecked", "rawtypes" }) private void getServices() { try { BundleContext bundleContext = FrameworkUtil.getBundle(ClientSelectorField.class).getBundleContext(); ServiceReference clientServiceReference = bundleContext.getServiceReference(SupplierService.class.getName()); supplierService = SupplierService.class.cast(bundleContext.getService(clientServiceReference)); } catch (Exception e) { e.getMessage(); } } public void setContext(IWorkbenchContext context) { this.context = context; } @Override public void setPropertyDataSource(Property newDataSource) { supplier = (Supplier) newDataSource.getValue(); if (supplier != null) supplierField.setValue(supplier.getName()); super.setPropertyDataSource(newDataSource); } @Override public Object getValue() { return supplier; } @Override public Class<?> getType() { return Supplier.class; } public boolean isSearchEntityVisible() { return searchEntityVisible; } public void setSearchEntityVisible(boolean searchEntityVisible) { this.searchEntityVisible = searchEntityVisible; btnSearchEntity.setVisible(searchEntityVisible); } /** * @return the clearEntityVisible */ public boolean isClearEntityVisible() { return clearEntityVisible; } /** * @param clearEntityVisible the clearEntityVisible to set */ public void setClearEntityVisible(boolean clearEntityVisible) { this.clearEntityVisible = clearEntityVisible; btnClearEntity.setVisible(clearEntityVisible); } /** * @return the addEntityVisible */ public boolean isAddEntityVisible() { return addEntityVisible; } /** * @param addEntityVisible the addEntityVisible to set */ public void setAddEntityVisible(boolean addEntityVisible) { this.addEntityVisible = addEntityVisible; btnAddEntity.setVisible(addEntityVisible); } @AutoGenerated private HorizontalLayout buildMainLayout() { // common part: create layout mainLayout = new HorizontalLayout(); mainLayout.setImmediate(false); mainLayout.setWidth("-1px"); mainLayout.setHeight("28px"); mainLayout.setMargin(false); // top-level component properties setWidth("-1px"); setHeight("28px"); // holeField supplierField = new TextField(); supplierField.setImmediate(false); supplierField.setWidth("150px"); supplierField.setHeight("-1px"); mainLayout.addComponent(supplierField); ButtonGroup editionButtonGroup = new ButtonGroup(); // btnSearch btnSearchEntity = new Button(); btnSearchEntity.setIcon(new ThemeResource("../konekti/images/icons/container-module/magnifier-zoom.png")); btnSearchEntity.setImmediate(true); btnSearchEntity.setWidth("-1px"); btnSearchEntity.setHeight("-1px"); editionButtonGroup.addButton(btnSearchEntity); btnClearEntity = new Button(); btnClearEntity.setIcon(new ThemeResource("../konekti/images/icons/eraser.png")); btnClearEntity.setImmediate(true); btnClearEntity.setWidth("-1px"); btnClearEntity.setHeight("-1px"); editionButtonGroup.addButton(btnClearEntity); btnAddEntity = new Button(); btnAddEntity.setIcon(new ThemeResource("../konekti/images/icons/plus-circle.png")); btnAddEntity.setImmediate(true); btnAddEntity.setWidth("-1px"); btnAddEntity.setHeight("-1px"); editionButtonGroup.addButton(btnAddEntity); mainLayout.addComponent(editionButtonGroup); mainLayout.setExpandRatio(editionButtonGroup, 1.0f); return mainLayout; } @Override protected void updateLabels() { btnSearchEntity.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.web.form.field.SupplierSelectorField.btnSearchEntity.description")); btnClearEntity.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.web.form.field.SupplierSelectorField.btnClearEntity.description")); btnAddEntity.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.web.form.field.SupplierSelectorField.btnAddEntity.description")); } }