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