data-miner-manager/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/TabularFld.java

356 lines
9.8 KiB
Java

/**
*
*/
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: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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<AbstractFld> listeners = new ArrayList<AbstractFld>();
/**
* @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<String> 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<ItemType> selectableTypes = new ArrayList<ItemType>();
selectableTypes.add(ItemType.EXTERNAL_FILE);
List<ItemType> showableTypes = new ArrayList<ItemType>();
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<String> allowedMimeTypes = Arrays.asList("text/csv","text/plain","text/plain; charset=ISO-8859-1");
/**
* "zip"
*/
/*List<String> allowedFileExtensions = Arrays.asList("csv");
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,
allowedFileExtensions, new HashMap<String, String>());
*/
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: <br>" + list);
templatesList.addStyleName("workflow-templatesList");
}
private void retrieveTableInformation(Item item) {
DataMinerPortletServiceAsync.INSTANCE.retrieveTableInformation(item, new AsyncCallback<TableItemSimple>() {
@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<TableDefinition>() {
@Override
public void onFailure(Throwable caught) {
vp.unmask();
Info.display("ERROR", "");
}
@Override
public void onSuccess(TableDefinition tableDefinition) {
vp.unmask();
List<ColumnDefinition> 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("<div class='workflow-parameters-tableDescription'>"
+ Format.ellipse(tableName, 30) + "</div>"));
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);
}
}