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"));
}
}