/** * */ package org.gcube.portlets.user.dataminermanager.client.form; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter; import org.gcube.portlets.user.dataminermanager.client.bean.parameters.TabularParameter; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple; import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener; import org.gcube.portlets.widgets.wsexplorer.client.select.WorkspaceExplorerSelectDialog; import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.core.client.dom.XDOM; import com.sencha.gxt.core.client.util.Format; import com.sencha.gxt.widget.core.client.button.TextButton; import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer; import com.sencha.gxt.widget.core.client.container.MarginData; import com.sencha.gxt.widget.core.client.container.SimpleContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; import com.sencha.gxt.widget.core.client.event.SelectEvent; /** * * @author Giancarlo Panichi * email: g.panichi@isti.cnr.it * */ public class TabularFld extends AbstractFld { private SimpleContainer sc; private VerticalLayoutContainer vp; // TableSelector tableSelector; private WorkspaceExplorerSelectDialog wselectDialog; private TextButton selectButton, selectButton2, cancelButton; private HTML templatesList; private TableItemSimple selectedTableItem = null; private List listeners = new ArrayList(); /** * @param parameter */ public TabularFld(Parameter parameter) { super(parameter); Log.debug("TabularField"); vp=new VerticalLayoutContainer(); init(); sc=new SimpleContainer(); sc.add(vp, new MarginData(0)); showNoSelectionField(); } private void init() { TabularParameter p = (TabularParameter) parameter; List templates = p.getTemplates(); /* * tableSelector = new TableSelector(templates) { * * @Override public void fireSelection(TableItemSimple tableItem) { * super.fireSelection(tableItem); selectedTableItem = tableItem; * showFieldWithSelection(); * * loadTableMetadata(tableItem); // send change message to all listeners * // it will be managed by all columnFields and columnListField that * depends by tabular field } }; */ List selectableTypes = new ArrayList(); selectableTypes.add(ItemType.EXTERNAL_FILE); List showableTypes = new ArrayList(); showableTypes.addAll(Arrays.asList(ItemType.values())); /* "application/zip", "application/x-zip", "application/x-zip-compressed", "application/octet-stream", "application/x-compress", "application/x-compressed", "multipart/x-zip" */ //List allowedMimeTypes = Arrays.asList("text/csv","text/plain","text/plain; charset=ISO-8859-1"); /** * "zip" */ /*List allowedFileExtensions = Arrays.asList("csv"); FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes, allowedFileExtensions, new HashMap()); */ wselectDialog = new WorkspaceExplorerSelectDialog("Select CSV",false); // filterCriteria, selectableTypes); WorskpaceExplorerSelectNotificationListener handler = new WorskpaceExplorerSelectNotificationListener() { @Override public void onSelectedItem(Item item) { if (item.isFolder() || item.isRoot()) { UtilsGXT3.info("Attention", "Select a valid csv!"); } else { retrieveTableInformation(item); } } @Override public void onFailed(Throwable throwable) { Log.error("Error in create project: " + throwable.getLocalizedMessage()); UtilsGXT3.alert("Error", throwable.getLocalizedMessage()); throwable.printStackTrace(); } @Override public void onAborted() { } @Override public void onNotValidSelection() { UtilsGXT3.info("Attention", "Select a valid csv!"); } }; wselectDialog.addWorkspaceExplorerSelectNotificationListener(handler); wselectDialog.setZIndex(XDOM.getTopZIndex()); selectButton = new TextButton("Select Data Set"); selectButton.addSelectHandler(new SelectEvent.SelectHandler() { @Override public void onSelect(SelectEvent event) { wselectDialog.show(); } }); selectButton.setIcon(DataMinerManager.resources.folderExplore()); selectButton.setToolTip("Select Data Set"); selectButton2 = new TextButton(""); selectButton2.addSelectHandler(new SelectEvent.SelectHandler() { @Override public void onSelect(SelectEvent event) { wselectDialog.show(); } }); selectButton2.setIcon(DataMinerManager.resources.folderExplore()); selectButton2.setToolTip("Select Another Data Set"); cancelButton = new TextButton(""); cancelButton.addSelectHandler(new SelectEvent.SelectHandler() { @Override public void onSelect(SelectEvent event) { selectedTableItem = null; showNoSelectionField(); updateListeners(null); } }); cancelButton.setIcon(DataMinerManager.resources.cancel()); String list = ""; boolean first = true; for (String template : templates) { list += (first ? "" : ", ") + template; first = false; } templatesList = new HTML("Suitable Data Set Templates:
" + list); templatesList.addStyleName("workflow-templatesList"); } private void retrieveTableInformation(Item item) { DataMinerPortletServiceAsync.INSTANCE.retrieveTableInformation(item, new AsyncCallback() { @Override public void onFailure(Throwable caught) { Log.error("Error in retrieveTableInformation " + caught.getMessage()); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session"); //sessionExpiredShowDelayed(); } else { UtilsGXT3.alert( "Error", "Error retrieving table information: " + caught.getLocalizedMessage()); } } @Override public void onSuccess(TableItemSimple result) { Log.debug("Retrieved: "+result); selectedTableItem=result; showFieldWithSelection(); //loadTableMetadata(selectedTableItem); updateListeners(selectedTableItem); } }); } /** * @param tableItem protected void loadTableMetadata(final TableItemSimple tableItem) { //TabularData tabularData = DataMinerManager.getTabularData(); String tableId = tableItem.getId(); tabularData.getTableDefinition(tableId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { vp.unmask(); Info.display("ERROR", ""); } @Override public void onSuccess(TableDefinition tableDefinition) { vp.unmask(); List columns = tableDefinition .getColumnsAsList(); Collections.sort(columns, new ColumnPositionComparator( false)); for (ColumnDefinition column : columns) tableItem.addColumnName(column.getLabel()); updateListeners(tableItem); } }); vp.mask("Load Data Set Metadata...", Constants.maskLoadingStyle); }*/ /** * @param id */ protected void updateListeners(TableItemSimple tableItem) { for (AbstractFld abstractField : listeners) { abstractField.fireEvent(tableItem); } } /** * */ private void showNoSelectionField() { vp.clear(); vp.add(selectButton); vp.add(templatesList); sc.forceLayout(); } /** * */ private void showFieldWithSelection() { //final String tableId = selectedTableItem.getId(); final String tableName = selectedTableItem.getName(); vp.clear(); HorizontalLayoutContainer hp = new HorizontalLayoutContainer(); hp.add(new HTML("
" + Format.ellipse(tableName, 30) + "
")); hp.add(selectButton2); hp.add(cancelButton); TextButton openTableButton = new TextButton("Open Data Set"); openTableButton.addSelectHandler(new SelectEvent.SelectHandler() { @Override public void onSelect(SelectEvent event) { /*TabularData tabularData = DataMinerManager .getTabularData(); TabularDataGridPanel gridPanel = tabularData .getGridPanel(); gridPanel.setExpanded(true); gridPanel.setBorders(true); Dialog dialog = new Dialog(); dialog.setMaximizable(true); dialog.setBodyBorder(false); dialog.setExpanded(true); dialog.setHeadingText("Data Set " + tableName); dialog.setWidth(640); dialog.setHeight(480); dialog.setHideOnButtonClick(true); dialog.setModal(true); dialog.add(gridPanel); dialog.show(); tabularData.openTable(tableId); gridPanel.setHeaderVisible(false);*/ } }); hp.add(openTableButton); vp.add(hp); vp.add(templatesList); sc.forceLayout(); } /** * */ @Override public String getValue() { return (selectedTableItem == null) ? null : selectedTableItem.getId(); } /** * */ @Override public Widget getWidget() { return sc; } /** * */ @Override public boolean isValid() { return (selectedTableItem != null); } public void addChangeListener(AbstractFld abstractField) { this.listeners.add(abstractField); } }