From 65b120a380161fb60d6bed221ea4758f6240bcc1 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Fri, 27 Sep 2013 15:35:58 +0000 Subject: [PATCH] Add Information Panel git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-portlet@82109 82a268e6-3cf1-43bd-a215-b396298e98cf --- .settings/org.eclipse.wst.common.component | 5 +- pom.xml | 41 +++-- .../user/td/client/TabularDataController.java | 141 +++++++++++++++++- .../user/td/client/TabularDataPortlet.java | 73 +++++++-- .../client/event/OpenFunctionalityEvent.java | 42 ++++++ .../client/event/OpenFunctionalityType.java | 12 ++ .../user/td/client/ribbon/FileToolBar.java | 4 +- .../user/td/TabularDataPortlet.gwt.xml | 10 +- src/main/webapp/WEB-INF/web.xml | 32 +++- 9 files changed, 315 insertions(+), 45 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityType.java diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index d7b32dd..32dc0da 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -10,7 +10,7 @@ uses - + uses @@ -19,6 +19,9 @@ uses + + uses + diff --git a/pom.xml b/pom.xml index f781806..e5e8d0a 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ aslcore [3.2.1-SNAPSHOT,4.0.0-SNAPSHOT) provided - + @@ -117,18 +117,10 @@ - + org.gcube.portlets.user tabular-data-widget-td-source @@ -147,7 +139,7 @@ [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT] sources - + org.gcube.portlets.user @@ -167,30 +159,37 @@ SDMXImportWizardTD 1.0.0-SNAPSHOT - + org.gcube.portlets.user SDMXExportWizardTD 1.0.0-SNAPSHOT - - + + org.gcube.portlets.user TDOpen 1.0.0-SNAPSHOT - + + + + org.gcube.portlets.user + tabular-data-information + 1.0.0-SNAPSHOT + + org.gcube.data.analysis.tabulardata service-client-mock [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) - - - + + + diff --git a/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java b/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java index 586ce8c..9599740 100644 --- a/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java +++ b/src/main/java/org/gcube/portlets/user/td/client/TabularDataController.java @@ -14,18 +14,33 @@ import org.gcube.portlets.user.td.client.event.ExportTableEvent; import org.gcube.portlets.user.td.client.event.ExportTableType; import org.gcube.portlets.user.td.client.event.ImportTableEvent; import org.gcube.portlets.user.td.client.event.ImportTableType; +import org.gcube.portlets.user.td.client.event.OpenFunctionalityEvent; +import org.gcube.portlets.user.td.client.event.OpenFunctionalityType; import org.gcube.portlets.user.td.client.event.OpenTabularResourceEvent; import org.gcube.portlets.user.td.client.event.OpenTabularResourceType; import org.gcube.portlets.user.td.importer.client.TabularDataImporterListener; +import org.gcube.portlets.user.td.information.client.TabularResourceProperties; import org.gcube.portlets.user.td.open.client.TDOpen; import org.gcube.portlets.user.tdw.client.TabularData; import org.gcube.portlets.user.tdw.shared.model.TableId; import com.allen_sauer.gwt.log.client.Log; +import com.extjs.gxt.ui.client.event.ResizeEvent; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.RunAsyncCallback; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Widget; import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.SimpleEventBus; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.ContentPanel; +import com.sencha.gxt.widget.core.client.TabItemConfig; +import com.sencha.gxt.widget.core.client.TabPanel; +import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer; +import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData; +import com.sencha.gxt.widget.core.client.event.BeforeCloseEvent; +import com.sencha.gxt.widget.core.client.event.BeforeCloseEvent.BeforeCloseHandler; import com.sencha.gxt.widget.core.client.info.Info; /** * @author "Federico De Faveri defaveri@isti.cnr.it" @@ -37,7 +52,15 @@ public class TabularDataController { protected SimpleEventBus eventBus; protected TabularData tabularData; + protected BorderLayoutContainer centerContainer; + protected ContentPanel functionalityPanel; + protected TabPanel functionalityTab; + protected int indexFunctionalityTab = 0; + protected boolean functionalityOpen; + protected Label propertiesLabel; + + protected BorderLayoutData eastData; /** * Table Open @@ -72,6 +95,44 @@ public class TabularDataController { } + public BorderLayoutContainer getCenterContainer() { + return centerContainer; + } + + public void setCenterContainer(BorderLayoutContainer centerContainer) { + this.centerContainer = centerContainer; + } + + + public ContentPanel getFunctionalityPanel() { + return functionalityPanel; + } + + public void setFunctionalityPanel(ContentPanel functionalityPanel) { + this.functionalityPanel = functionalityPanel; + } + + public TabPanel getFunctionalityTab() { + return functionalityTab; + } + + public void setFunctionalityTab(TabPanel functionalityTab) { + this.functionalityTab = functionalityTab; + } + + public BorderLayoutData getEastData() { + return eastData; + } + + public void setEastData(BorderLayoutData eastData) { + this.eastData = eastData; + } + + + + + + protected void bindToEvents() { eventBus.addHandler(ImportTableEvent.TYPE, new ImportTableEvent.ImportTableHandler() { @@ -105,6 +166,15 @@ public class TabularDataController { doCloseTabularResource(event.getCloseType()); } }); + eventBus.addHandler(OpenFunctionalityEvent.TYPE, + new OpenFunctionalityEvent.OpenFunctionalityHandler() { + + @Override + public void onOpenFunctionality(OpenFunctionalityEvent event) { + doOpenFunctionality(event.getOpenFunctionalityType()); + } + }); + } @@ -186,6 +256,74 @@ public class TabularDataController { } } + public void doOpenFunctionality(OpenFunctionalityType openType) { + Log.trace("doOpenFunctionality openType: " + openType); + Info.display("Open Functionality", "open: " + openType); + try { + switch (openType) { + case PROPERTIES: + openFunctionalityProperties(); + break; + default: + break; + } + } catch (Exception e) { + Log.error("doOpenFunctionality Error : " + e.getLocalizedMessage()); + e.printStackTrace(); + } + } + + + + protected void openFunctionalityProperties(){ + if(propertiesLabel==null){ + propertiesLabel = new Label("Tabular Resources Properties"); + propertiesLabel.addStyleName("pad-text"); + TabItemConfig propertiesItemConf=new TabItemConfig("Properties", true); + + org.gcube.portlets.user.td.information.shared.TRId trId=new org.gcube.portlets.user.td.information.shared.TRId("0","1"); + TabularResourceProperties trProperties=new TabularResourceProperties("TRProperties",eventBus,trId); + trProperties.setHeaderVisible(false); + functionalityTab.add(trProperties, propertiesItemConf); + functionalityTab.addBeforeCloseHandler(new BeforeCloseHandler(){ + + @Override + public void onBeforeClose(BeforeCloseEvent event) { + if(functionalityTab.getWidgetCount()==1){ + functionalityPanel.disable(); + functionalityPanel.collapse(); + functionalityOpen=false; + propertiesLabel=null; + } + + } + + } + ); + + Label taskLabel = new Label("Task Properties"); + taskLabel.addStyleName("pad-text"); + functionalityTab.add(taskLabel, new TabItemConfig("Task", true)); + + + //Last is functionalityTab.getWidgetCount() - 1) + functionalityTab.setActiveWidget(functionalityTab + .getWidget(0)); + + centerContainer.onResize(); + } + + if(functionalityOpen){ + functionalityPanel.collapse(); + functionalityOpen=false; + } else { + functionalityPanel.enable(); + functionalityPanel.expand(); + functionalityOpen=true; + } + centerContainer.onResize(); + }; + protected void openSDMXImportWizard() { GWT.runAsync(new RunAsyncCallback() { @@ -330,7 +468,8 @@ public class TabularDataController { tableOpening=new TableId(Constants.TD_DATASOURCE_FACTORY_ID,trId.getTableId()); tabularData.openTable(tableOpening); tableOpen=true; - + + } diff --git a/src/main/java/org/gcube/portlets/user/td/client/TabularDataPortlet.java b/src/main/java/org/gcube/portlets/user/td/client/TabularDataPortlet.java index 8b80015..f6160c5 100644 --- a/src/main/java/org/gcube/portlets/user/td/client/TabularDataPortlet.java +++ b/src/main/java/org/gcube/portlets/user/td/client/TabularDataPortlet.java @@ -4,31 +4,29 @@ package org.gcube.portlets.user.td.client; import org.gcube.portlets.user.td.client.ribbon.TabularDataRibbon; import org.gcube.portlets.user.td.client.rpc.TabularDataService; import org.gcube.portlets.user.td.client.rpc.TabularDataServiceAsync; - import org.gcube.portlets.user.tdw.client.TabularData; import org.gcube.portlets.user.tdw.client.TabularDataGridPanel; import org.gcube.portlets.user.tdw.client.event.FailureEvent; import org.gcube.portlets.user.tdw.client.event.FailureEventHandler; -import org.gcube.portlets.user.tdw.shared.model.DataRow; -import org.gcube.portlets.user.tdw.shared.model.TableId; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.user.client.ui.ResizeLayoutPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import com.google.web.bindery.event.shared.EventBus; import com.sencha.gxt.core.client.util.Margins; -import com.sencha.gxt.widget.core.client.Dialog; +import com.sencha.gxt.widget.core.client.ContentPanel; +import com.sencha.gxt.widget.core.client.Portlet; +import com.sencha.gxt.widget.core.client.TabPanel; +import com.sencha.gxt.widget.core.client.button.ToolButton; import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer; import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData; 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.Viewport; -import com.sencha.gxt.widget.core.client.grid.Grid; import com.sencha.gxt.widget.core.client.info.Info; /** @@ -57,6 +55,11 @@ public class TabularDataPortlet implements EntryPoint { //Private TabularData private static TabularData tabularData; + private static BorderLayoutContainer centerContainer; + private static ContentPanel functionalityPanel; + private static TabPanel functionalityTab; + private static BorderLayoutData eastData; + /** * {@inheritDoc} */ @@ -114,16 +117,53 @@ public class TabularDataPortlet implements EntryPoint { mainPanelLayout.setNorthWidget(toolBarPanel, toolBarData); - //Grid + //Set Center Container + centerContainer = new BorderLayoutContainer(); + centerContainer.setResize(true); + centerContainer.setBorders(false); + + + //Grid Panel final TabularDataGridPanel gridPanel = tabularData.getGridPanel(); - MarginData gridData = new MarginData(); + gridPanel.setHeaderVisible(false); + + MarginData gridData = new MarginData(); + centerContainer.setCenterWidget(gridPanel,gridData); + + //Functionality Panel + functionalityPanel= new ContentPanel(); + functionalityPanel.setHeaderVisible(false); + functionalityPanel.setResize(true); + + functionalityTab=new TabPanel(); + //functionalityTab.setPixelSize(600, 250); + functionalityTab.setAnimScroll(true); + functionalityTab.setTabScroll(true); + functionalityTab.setCloseContextMenu(true); - /*TableId tableopening=new TableId(Constants.TD_DATASOURCE_FACTORY_ID,"1"); - tabularData.openTable(tableopening); - gridPanel.setHeaderVisible(false);*/ + eastData = new BorderLayoutData(200); + eastData.setCollapsible(true); + eastData.setSplit(true); + eastData.setFloatable(false); + eastData.setCollapseMini(true); + eastData.setMargins(new Margins(0, 5, 0, 5)); + eastData.setCollapseHidden(true); + //eastData.setCollapsed(true); + + functionalityPanel.add(functionalityTab); + //functionalityPanel.setVisible(false); + + centerContainer.setEastWidget(functionalityPanel,eastData); + functionalityPanel.collapse(); + functionalityPanel.disable(); + + controller.setFunctionalityTab(functionalityTab); + controller.setFunctionalityPanel(functionalityPanel); - mainPanelLayout.setCenterWidget(gridPanel, gridData); + //Set Center Container + mainPanelLayout.setCenterWidget(centerContainer, gridData); + controller.setCenterContainer(centerContainer); //Main SimpleContainer mainPanel = new SimpleContainer(); @@ -148,6 +188,13 @@ public class TabularDataPortlet implements EntryPoint { root.add(viewport); } } + + private void configPanel(final Portlet panel) { + panel.setCollapsible(true); + panel.setAnimCollapse(false); + //panel.getHeader().addTool(new ToolButton(ToolButton.GEAR)); + panel.getHeader().addTool(new ToolButton(ToolButton.CLOSE)); - + } + } diff --git a/src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityEvent.java b/src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityEvent.java new file mode 100644 index 0000000..c9b904f --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityEvent.java @@ -0,0 +1,42 @@ +package org.gcube.portlets.user.td.client.event; + +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.EventHandler; + +import com.google.gwt.event.shared.HasHandlers; + +public class OpenFunctionalityEvent extends GwtEvent { + + public static Type TYPE = new Type(); + private OpenFunctionalityType openFunctionalityType; + + public interface OpenFunctionalityHandler extends EventHandler { + void onOpenFunctionality(OpenFunctionalityEvent event); + } + + public OpenFunctionalityEvent(OpenFunctionalityType openFunctionalityType) { + this.openFunctionalityType = openFunctionalityType; + } + + public OpenFunctionalityType getOpenFunctionalityType() { + return openFunctionalityType; + } + + @Override + protected void dispatch(OpenFunctionalityHandler handler) { + handler.onOpenFunctionality(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, OpenFunctionalityType openFunctionalityType) { + source.fireEvent(new OpenFunctionalityEvent(openFunctionalityType)); + } +} diff --git a/src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityType.java b/src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityType.java new file mode 100644 index 0000000..3237712 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/client/event/OpenFunctionalityType.java @@ -0,0 +1,12 @@ +/** + * + */ +package org.gcube.portlets.user.td.client.event; + +/** + * @author "Federico De Faveri defaveri@isti.cnr.it" + * + */ +public enum OpenFunctionalityType { + PROPERTIES; +} diff --git a/src/main/java/org/gcube/portlets/user/td/client/ribbon/FileToolBar.java b/src/main/java/org/gcube/portlets/user/td/client/ribbon/FileToolBar.java index 5e14c27..6161fc5 100644 --- a/src/main/java/org/gcube/portlets/user/td/client/ribbon/FileToolBar.java +++ b/src/main/java/org/gcube/portlets/user/td/client/ribbon/FileToolBar.java @@ -9,6 +9,8 @@ import org.gcube.portlets.user.td.client.event.ExportTableEvent; import org.gcube.portlets.user.td.client.event.ExportTableType; import org.gcube.portlets.user.td.client.event.ImportTableEvent; import org.gcube.portlets.user.td.client.event.ImportTableType; +import org.gcube.portlets.user.td.client.event.OpenFunctionalityEvent; +import org.gcube.portlets.user.td.client.event.OpenFunctionalityType; import org.gcube.portlets.user.td.client.event.OpenTabularResourceEvent; import org.gcube.portlets.user.td.client.event.OpenTabularResourceType; import org.gcube.portlets.user.td.client.resource.TabularDataResources; @@ -132,7 +134,7 @@ public class FileToolBar { @Override public void onSelect(SelectEvent event) { - //eventBus.fireEvent(new ImportTableEvent(ImportTableType.JSON)); + eventBus.fireEvent(new OpenFunctionalityEvent(OpenFunctionalityType.PROPERTIES)); } }); diff --git a/src/main/resources/org/gcube/portlets/user/td/TabularDataPortlet.gwt.xml b/src/main/resources/org/gcube/portlets/user/td/TabularDataPortlet.gwt.xml index 8271990..cde12d0 100644 --- a/src/main/resources/org/gcube/portlets/user/td/TabularDataPortlet.gwt.xml +++ b/src/main/resources/org/gcube/portlets/user/td/TabularDataPortlet.gwt.xml @@ -8,11 +8,15 @@ - - + - + + + + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index f0ab032..b58aa30 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -23,6 +23,12 @@ org.gcube.portlets.user.tdw.server.TabularDataServlet + + + TDInformationService + org.gcube.portlets.user.td.information.server.TDInformationServiceImpl + + TDOpenService @@ -34,6 +40,12 @@ SDMXImportWizardService org.gcube.portlets.user.sdmximportwizardtd.server.SDMXImportWizardServiceImpl + + + + SDMXExportWizardService + org.gcube.portlets.user.sdmxexportwizardtd.server.SDMXExportWizardServiceImpl + @@ -90,7 +102,7 @@ org.gcube.portlets.user.workspace.server.UploadServlet - + tdservlet /tabulardataportlet/tds @@ -108,6 +120,13 @@ /tabulardataportlet/tdwdata + + + TDInformationService + /tabulardataportlet/TDInformationService + + + TDOpenService @@ -120,10 +139,13 @@ SDMXImportWizardService /tabulardataportlet/SDMXImportWizardService - - - - + + + + SDMXExportWizardService + /tabulardataportlet/SDMXExportWizardService + +