package com.thingtrack.konekti.view.module.integration.internal; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.io.FileUtils; import com.thingtrack.konekti.service.api.ConfigurationService; import com.thingtrack.konekti.view.addon.data.BindingSource; import com.thingtrack.konekti.view.addon.ui.AbstractView; import com.thingtrack.konekti.view.addon.ui.BoxToolbar; import com.thingtrack.konekti.view.addon.ui.WindowDialog; import com.thingtrack.konekti.view.addon.ui.BoxToolbar.ClickFilterButtonListener; import com.thingtrack.konekti.view.addon.ui.BoxToolbar.ClickPrintButtonListener; import com.thingtrack.konekti.view.addon.ui.DataGridView; import com.thingtrack.konekti.view.addon.ui.NavigationToolbar; import com.thingtrack.konekti.view.addon.ui.NavigationToolbar.ClickRefreshButtonListener; import com.thingtrack.konekti.view.addon.ui.WindowDialog.DialogResult; import com.thingtrack.konekti.view.kernel.IWorkbenchContext; import com.thingtrack.konekti.view.kernel.ui.layout.IViewContainer; import com.thingtrack.konekti.view.module.integration.addon.ProtocolToolbar; import com.thingtrack.konekti.view.module.integration.addon.ProtocolToolbar.ClickChangeEvent; import com.thingtrack.konekti.view.module.integration.addon.ProtocolToolbar.ClickNavigationEvent; import com.thingtrack.konekti.view.module.integration.addon.ProtocolToolbar.ClickOpenProtocolButtonListener; import com.thingtrack.konekti.view.module.integration.addon.ProtocolToolbar.ClickRecoverProtocolButtonListener; import com.thingtrack.konekti.view.module.integration.addon.ProtocolToolbar.ClickSelectProtocolBoxButtonListener; import com.thingtrack.konekti.view.module.integration.addon.ProtocolToolbar.ClickSelectProtocolTypeButtonListener; import com.thingtrack.konekti.view.module.integration.addon.ProtocolViewForm; import com.vaadin.annotations.AutoGenerated; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window.Notification; import com.vaadin.data.Property; @SuppressWarnings("serial") public class IntegrationView extends AbstractView implements ClickRefreshButtonListener, ClickFilterButtonListener, ClickPrintButtonListener, ClickOpenProtocolButtonListener, ClickRecoverProtocolButtonListener, ClickSelectProtocolBoxButtonListener, ClickSelectProtocolTypeButtonListener { @AutoGenerated private VerticalLayout mainLayout; @AutoGenerated private DataGridView dgProtocol; /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ private ConfigurationService configurationService; private BindingSource<Protocol> bsProtocol = new BindingSource<Protocol>(Protocol.class, 0); private NavigationToolbar navigationToolbar; private BoxToolbar boxToolbar; private ProtocolToolbar protocolToolbar; private IViewContainer viewContainer; private IWorkbenchContext context; private String boxImport; private String boxImportHist; private String boxExport; private File box; private ProtocolToolbar.BOX protocolBox; private Protocol.DIRECTION protocolDirection; /** * 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 IntegrationView(IWorkbenchContext context, IViewContainer viewContainer) { buildMainLayout(); setCompositionRoot(mainLayout); // TODO add user code here this.context = context; // set Slide View Services and ViewContainer to navigate this.viewContainer = viewContainer; this.configurationService = IntegrationViewContainer.getConfigurationService(); } @Override public void attach() { try { getConfigurationData(); initView(); } catch (Exception e) { throw new RuntimeException("¡No se existen la configuración de integración!", e); } } private void getConfigurationData() throws Exception { this.boxImport = configurationService.getStringByTag(context.getUser(), "BOX_IMPORT", null); this.boxImportHist = configurationService.getStringByTag(context.getUser(), "BOX_IMPORT_HIST", null); this.boxExport = configurationService.getStringByTag(context.getUser(), "BOX_EXPORT", null); } private void initView() { try { // initialize Slide View Organization View dgProtocol.setImmediate(true); dgProtocol.setSelectable(true); // bind datasource dgProtocol.setBindingSource(bsProtocol); // set visible and collapsed columns dgProtocol.setVisibleColumns(new String[] { "fileName", "protocolType", "protocolDirection", "protocolDate" }); dgProtocol.setColumnHeaders(new String[] { "Fichero", "Tipo", "Dirección", "Date" }); } catch (Exception ex) { ex.getMessage(); } refreshBindindSource(); injectConfigurationBindingSource(); } private void refreshBindindSource() { try { bsProtocol.removeAllItems(); if (protocolDirection == Protocol.DIRECTION.IMPORT) { for (Protocol protocol : getProtocolList(protocolDirection)) bsProtocol.addItem(protocol); } else if (protocolDirection == Protocol.DIRECTION.EXPORT) { for (Protocol protocol : getProtocolList(protocolDirection)) bsProtocol.addItem(protocol); } else { for (Protocol protocol : getProtocolList(Protocol.DIRECTION.IMPORT)) bsProtocol.addItem(protocol); for (Protocol protocol : getProtocolList(Protocol.DIRECTION.EXPORT)) bsProtocol.addItem(protocol); } bsProtocol.sort(new Object[] {"protocolDate"}, new boolean[] {false}); // select the first item if exist if (bsProtocol.size() > 0) bsProtocol.setItemId(bsProtocol.getIdByIndex(0)); } catch (IllegalArgumentException e) { throw new RuntimeException("¡No se pudo refrescar los Protocolos!", e); } catch (Exception e) { throw new RuntimeException("¡No se pudo refrescar los Protocolos!", e); } } private List<Protocol> getProtocolList(Protocol.DIRECTION direction) throws IOException { List<Protocol> protocols = new ArrayList<Protocol>(); if (direction.equals(Protocol.DIRECTION.IMPORT)) box = new File(boxImportHist); else if (direction.equals(Protocol.DIRECTION.EXPORT)) box = new File(boxExport); if (box.isDirectory()) { if (box.canRead()) { for (File protocol : box.listFiles()) { if (protocol.isFile()) { if (protocolDirection == null) protocols.add(new Protocol(getI18N(), protocol.getName(), protocol, FileUtils.readFileToByteArray(protocol), new Date(protocol.lastModified()))); else if (protocolDirection == Protocol.DIRECTION.IMPORT) { Protocol prot = new Protocol(getI18N(), protocol.getName(), protocol, FileUtils.readFileToByteArray(protocol), new Date(protocol.lastModified())); if (prot.getDirection().equals(Protocol.DIRECTION.IMPORT)) protocols.add(prot); } else if (protocolDirection == Protocol.DIRECTION.EXPORT) { Protocol prot = new Protocol(getI18N(), protocol.getName(), protocol, FileUtils.readFileToByteArray(protocol), new Date(protocol.lastModified())); if (prot.getDirection().equals(Protocol.DIRECTION.EXPORT)) protocols.add(prot); } } } } } return protocols; } private void injectConfigurationBindingSource() { navigationToolbar = new NavigationToolbar(0, bsProtocol, viewContainer); boxToolbar = new BoxToolbar(1, bsProtocol); protocolToolbar = new ProtocolToolbar(getI18N(), 2, bsProtocol, viewContainer); navigationToolbar.addListenerRefreshButton(this); navigationToolbar.setUpButton(false); navigationToolbar.setDownButton(false); boxToolbar.addListenerFilterButton(this); boxToolbar.addListenerPrintButton(this); protocolToolbar.addListenerOpenProtocolButton(this); protocolToolbar.addListenerRecoverProtocolButton(this); protocolToolbar.addListenerSelectProtocolBoxButton(this); protocolToolbar.addListenerSelectProtocolTypeButton(this); removeAllToolbar(); addToolbar(navigationToolbar); addToolbar(boxToolbar); addToolbar(protocolToolbar); } @Override public void refreshButtonClick(NavigationToolbar.ClickNavigationEvent event) { refreshBindindSource(); } @Override public void openProtocolButtonClick(ClickNavigationEvent event) { Protocol editingProtocol = (Protocol) event.getRegister(); if (editingProtocol == null) return; try { @SuppressWarnings("unused") WindowDialog<Protocol> windowDialog = new WindowDialog<Protocol>( getWindow(), getI18N().getMessage("com.thingtrack.konekti.view.module.client.internal.ClientView.windowDialog.edit.tittle"), getI18N().getMessage("com.thingtrack.konekti.view.module.client.internal.ClientView.windowDialog.button.left"), DialogResult.SAVE, getI18N().getMessage("com.thingtrack.konekti.view.module.client.internal.ClientView.windowDialog.button.right"), DialogResult.CANCEL, new ProtocolViewForm(), editingProtocol, new WindowDialog.CloseWindowDialogListener<Protocol>() { public void windowDialogClose( WindowDialog<Protocol>.CloseWindowDialogEvent<Protocol> event) { if (event.getDialogResult() != WindowDialog.DialogResult.SAVE) return; } }); } catch (IllegalArgumentException e) { throw new RuntimeException( "¡No se pudo abrir el formulario Editor Cliente!", e); } catch (Exception e) { throw new RuntimeException( "¡No se pudo abrir el formulario Editor Cliente!", e); } } @Override public void recoverProtocolButtonClick(ClickNavigationEvent event) { Protocol editingProtocol = (Protocol) event.getRegister(); if (editingProtocol == null) return; File boxRecover = new File(boxImport); try { FileUtils.copyFileToDirectory(editingProtocol.getFile(), boxRecover); getApplication().getMainWindow().showNotification("Recuperación correcta", "", Notification.TYPE_HUMANIZED_MESSAGE); } catch (IOException e) { throw new RuntimeException( "¡No se pudo recuperar el protocolo!", e); } } @Override public void selectProtocolBoxButtonClick(ClickChangeEvent event) { protocolBox = (ProtocolToolbar.BOX)event.getRegister(); refreshBindindSource(); } @Override public void selectProtocolTypeButtonClick(ClickChangeEvent event) { protocolDirection = (Protocol.DIRECTION)event.getRegister(); refreshBindindSource(); } @AutoGenerated private VerticalLayout buildMainLayout() { // common part: create layout mainLayout = new VerticalLayout(); mainLayout.setImmediate(false); mainLayout.setWidth("100%"); mainLayout.setHeight("100%"); mainLayout.setMargin(false); // top-level component properties setWidth("100.0%"); setHeight("100.0%"); // dgEmployee dgProtocol = new DataGridView() { @Override protected String formatPropertyValue(Object rowId, Object colId, Property property) { // Format by property type if (property.getType() == Date.class) { SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); if (property.getValue() != null) return df.format((Date) property.getValue()); return null; } return super.formatPropertyValue(rowId, colId, property); } }; dgProtocol.setImmediate(false); dgProtocol.setWidth("100.0%"); dgProtocol.setHeight("100.0%"); mainLayout.addComponent(dgProtocol); mainLayout.setExpandRatio(dgProtocol, 1.0f); return mainLayout; } @Override public void filterButtonClick(BoxToolbar.ClickNavigationEvent event) { dgProtocol.setFilterBarVisible(); } @Override public void printButtonClick(BoxToolbar.ClickNavigationEvent event) { try { dgProtocol.print("Maestro Protocolos"); } catch (Exception e) { throw new RuntimeException("¡No se pudo imprimir el informe!", e); } } @Override protected void updateLabels() { dgProtocol.setColumnHeaders(new String[] { getI18N().getMessage("com.thingtrack.konekti.view.module.integration.internal.IntegrationView.dgProtocol.column.file"), getI18N().getMessage("com.thingtrack.konekti.view.module.integration.internal.IntegrationView.dgProtocol.column.type"), getI18N().getMessage("com.thingtrack.konekti.view.module.integration.internal.IntegrationView.dgProtocol.column.direction"), getI18N().getMessage("com.thingtrack.konekti.view.module.integration.internal.IntegrationView.dgProtocol.column.protocolDate")}); } }