From a34a0423426410945a01a9cad7c5554cd783f604 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Thu, 24 Oct 2013 10:26:05 +0000 Subject: [PATCH] Change Component Name on SVN git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-sdmx-import-widget@83966 82a268e6-3cf1-43bd-a215-b396298e98cf --- SDMXImportWizardTDTest-dev.launch | 22 + SDMXImportWizardTDTest-prod.launch | 22 + pom.xml | 316 +++++++++++++ .../client/AgenciesProperties.java | 34 ++ .../client/CodelistProperties.java | 31 ++ .../client/CodelistSelectionPanel.java | 231 +++++++++ .../client/DatasetProperties.java | 29 ++ .../client/DatasetSelectionPanel.java | 203 ++++++++ .../client/SDMXCodelistSelectionCard.java | 87 ++++ .../client/SDMXDatasetSelectionCard.java | 57 +++ .../client/SDMXDocumentSelectionCard.java | 100 ++++ .../client/SDMXImportWizardTD.java | 42 ++ .../client/SDMXImportWizardTDEntry.java | 15 + .../client/SDMXOperationInProgressCard.java | 203 ++++++++ .../client/SDMXRegistrySelectionCard.java | 210 +++++++++ .../client/SDMXTableDetailCard.java | 328 +++++++++++++ .../client/SourceSelectionCard.java | 152 ++++++ .../client/dataresource/ResourceBundle.java | 25 + .../client/dataresource/SDMXImportCSS.java | 39 ++ .../client/general/SimpleWizardCard.java | 33 ++ .../client/general/WizardCard.java | 272 +++++++++++ .../client/general/WizardListener.java | 33 ++ .../client/general/WizardWindow.java | 445 ++++++++++++++++++ .../progress/ImportProgressBarUpdater.java | 87 ++++ .../progress/OperationProgressListener.java | 42 ++ .../progress/OperationProgressUpdater.java | 131 ++++++ .../client/util/ErrorMessageBox.java | 70 +++ .../client/util/Format.java | 35 ++ .../client/util/NOPCallBack.java | 20 + .../client/util/WizardResources.java | 32 ++ .../SDMXImportWizardTD.gwt.xml | 32 ++ .../client/Messages.properties | 2 + .../client/Messages_fr.properties | 2 + .../resources/SDMXImportWizardTD.css | 54 +++ .../dataresource/resources/arrow-refresh.png | Bin 0 -> 984 bytes .../resources/arrow-refresh_16.png | Bin 0 -> 572 bytes .../resources/arrow-refresh_32.png | Bin 0 -> 1182 bytes src/main/webapp/SDMXImportWizardTD.css | 34 ++ src/main/webapp/SDMXImportWizardTD.html | 63 +++ src/main/webapp/WEB-INF/web.xml | 34 ++ .../client/GwtTestSDMXImportWizardTD.java | 67 +++ .../SDMXImportWizardTDJUnit.gwt.xml | 9 + templates/INSTALL | 0 templates/LICENSE | 6 + templates/MAINTAINERS | 1 + templates/README | 40 ++ templates/changelog.xml | 6 + templates/descriptor.xml | 39 ++ templates/profile.xml | 29 ++ templates/svnpath.txt | 1 + 50 files changed, 3765 insertions(+) create mode 100644 SDMXImportWizardTDTest-dev.launch create mode 100644 SDMXImportWizardTDTest-prod.launch create mode 100644 pom.xml create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/AgenciesProperties.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistProperties.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistSelectionPanel.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetProperties.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetSelectionPanel.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXCodelistSelectionCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDatasetSelectionCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDocumentSelectionCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTD.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTDEntry.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXOperationInProgressCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXRegistrySelectionCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXTableDetailCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SourceSelectionCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/ResourceBundle.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/SDMXImportCSS.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/SimpleWizardCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardCard.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardListener.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardWindow.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/ImportProgressBarUpdater.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressListener.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressUpdater.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/ErrorMessageBox.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/Format.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/NOPCallBack.java create mode 100644 src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/WizardResources.java create mode 100644 src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTD.gwt.xml create mode 100644 src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages.properties create mode 100644 src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages_fr.properties create mode 100644 src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/SDMXImportWizardTD.css create mode 100644 src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/arrow-refresh.png create mode 100644 src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/arrow-refresh_16.png create mode 100644 src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/arrow-refresh_32.png create mode 100644 src/main/webapp/SDMXImportWizardTD.css create mode 100644 src/main/webapp/SDMXImportWizardTD.html create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 src/test/java/org/gcube/portlets/user/sdmximportwizardtd/client/GwtTestSDMXImportWizardTD.java create mode 100644 src/test/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTDJUnit.gwt.xml create mode 100644 templates/INSTALL create mode 100644 templates/LICENSE create mode 100644 templates/MAINTAINERS create mode 100644 templates/README create mode 100644 templates/changelog.xml create mode 100644 templates/descriptor.xml create mode 100644 templates/profile.xml create mode 100644 templates/svnpath.txt diff --git a/SDMXImportWizardTDTest-dev.launch b/SDMXImportWizardTDTest-dev.launch new file mode 100644 index 0000000..e9c579c --- /dev/null +++ b/SDMXImportWizardTDTest-dev.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDMXImportWizardTDTest-prod.launch b/SDMXImportWizardTDTest-prod.launch new file mode 100644 index 0000000..7f06253 --- /dev/null +++ b/SDMXImportWizardTDTest-prod.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..670cb31 --- /dev/null +++ b/pom.xml @@ -0,0 +1,316 @@ + + + + + maven-parent + org.gcube.tools + 1.0.0 + + + + + 4.0.0 + org.gcube.portlets.user + tabular-data-sdmx-import-widget + 1.0.0-SNAPSHOT + + + tabular-data-sdmx-import-widget + tabular-data-sdmx-import-widget that allows sdmx import of codelists and dataset + + + https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/SDMXImportWizardTD + + + + + Giancarlo Panichi + g.panichi@isti.cnr.it + CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" + + architect + developer + + + + + + ${project.basedir}/distro + ${project.build.directory}/${project.build.finalName} + 2013-10-18 + templates + distro + config + + + 2.5.1 + + ${env.GLOBUS_LOCATION} + + UTF-8 + UTF-8 + + + + + + + localRun + + + org.slf4j + slf4j-api + compile + + + ch.qos.logback + logback-classic + 1.0.1 + runtime + + + + + + + + + com.google.gwt + gwt-servlet + + + com.google.gwt + gwt-user + + + + junit + junit + 4.8.1 + test + + + javax.validation + validation-api + 1.0.0.GA + test + + + javax.validation + validation-api + 1.0.0.GA + sources + test + + + + com.sencha.gxt + gxt + 3.0.1 + + + + + + org.gcube.data.publishing + sdmx-registry-client-gcube + [3.0.0-SNAPSHOT,4.0.0-SNAPSHOT) + + + + org.gcube.applicationsupportlayer + aslcore + provided + + + + org.gcube.portal + custom-portal-handler + + + + + org.gcube.data.analysis.tabulardata + service-client-mock + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + + + org.json + json + 20090211 + + + + + org.gcube.portlets.user + tabular-data-gwt-service + 1.0.0-SNAPSHOT + + + + + + com.allen-sauer.gwt.log + gwt-log + + + + org.slf4j + slf4j-api + + + + + + + + + + ${webappDirectory}/WEB-INF/classes + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + true + + + + + org.apache.maven.surefire + surefire-junit47 + 2.16 + + + + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwtVersion} + + + + resources + + + + + SDMXImportWizardTD.html + ${webappDirectory} + org.gcube.portlets.user.sdmximportwizardtd.SDMXImportWizardTD + + + + + + maven-resources-plugin + 2.6 + + + copy-profile + process-resources + + copy-resources + + + ${configDirectory} + + + ${templatesDirectory} + + profile.xml + + true + + + + + + copy-distro-resources + process-resources + + copy-resources + + + ${distroDirectory} + + + ${templatesDirectory} + + profile.xml + descriptor.xml + + true + + + + + + + + maven-clean-plugin + 2.5 + + + + ${distroDirectory} + + ** + + false + + + ${configDirectory} + + ** + + false + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2 + + + ${templatesDirectory}/descriptor.xml + + + + + servicearchive + package + + single + + + + + + + + + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/AgenciesProperties.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/AgenciesProperties.java new file mode 100644 index 0000000..85b05ce --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/AgenciesProperties.java @@ -0,0 +1,34 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + + + +import org.gcube.portlets.user.td.gxtservice.shared.Agencies; + +import com.google.gwt.editor.client.Editor.Path; +import com.sencha.gxt.core.client.ValueProvider; +import com.sencha.gxt.data.shared.LabelProvider; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.PropertyAccess; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public interface AgenciesProperties extends PropertyAccess { + + @Path("id") + ModelKeyProvider key(); + + LabelProvider nameLabel(); + + ValueProvider name(); + ValueProvider description(); + + + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistProperties.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistProperties.java new file mode 100644 index 0000000..3cafcb7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistProperties.java @@ -0,0 +1,31 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + + + +import org.gcube.portlets.user.td.gxtservice.shared.Codelist; + +import com.google.gwt.editor.client.Editor.Path; +import com.sencha.gxt.core.client.ValueProvider; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.PropertyAccess; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public interface CodelistProperties extends PropertyAccess { + + @Path("id") + ModelKeyProvider key(); + + ValueProvider name(); + ValueProvider agencyId(); + ValueProvider version(); + ValueProvider description(); + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistSelectionPanel.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistSelectionPanel.java new file mode 100644 index 0000000..b46afce --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/CodelistSelectionPanel.java @@ -0,0 +1,231 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.gcube.portlets.user.sdmximportwizardtd.client.dataresource.ResourceBundle; +import org.gcube.portlets.user.td.gxtservice.client.rpc.TDGXTServiceAsync; +import org.gcube.portlets.user.td.gxtservice.shared.Codelist; + + +import com.allen_sauer.gwt.log.client.Log; +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.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.event.logical.shared.HasSelectionHandlers; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.sencha.gxt.core.client.IdentityValueProvider; +import com.sencha.gxt.core.client.Style.SelectionMode; +import com.sencha.gxt.data.client.loader.RpcProxy; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.Store; +import com.sencha.gxt.data.shared.Store.StoreFilter; +import com.sencha.gxt.data.shared.loader.ListLoadConfig; +import com.sencha.gxt.data.shared.loader.ListLoadResult; +import com.sencha.gxt.data.shared.loader.ListLoadResultBean; +import com.sencha.gxt.data.shared.loader.ListLoader; +import com.sencha.gxt.data.shared.loader.LoadResultListStoreBinding; +import com.sencha.gxt.widget.core.client.ContentPanel; +import com.sencha.gxt.widget.core.client.Resizable; +import com.sencha.gxt.widget.core.client.Resizable.Dir; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.TextField; +import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel; +import com.sencha.gxt.widget.core.client.grid.ColumnConfig; +import com.sencha.gxt.widget.core.client.grid.ColumnModel; +import com.sencha.gxt.widget.core.client.grid.Grid; +import com.sencha.gxt.widget.core.client.toolbar.LabelToolItem; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class CodelistSelectionPanel extends ContentPanel implements HasSelectionHandlers { + + private static final CodelistProperties properties = GWT.create(CodelistProperties.class); + + protected static final ColumnConfig nameColumn = new ColumnConfig(properties.name(), 50, "Name"); + protected static final ColumnConfig agencyIdColumn = new ColumnConfig(properties.agencyId(), 50, "Agency Id"); + protected static final ColumnConfig versionColumn = new ColumnConfig(properties.version(), 50, "Version"); + protected static final ColumnConfig descriptionColumn = new ColumnConfig(properties.description(), 50, "Description"); + + protected Grid grid; + protected ResourceBundle res; + + + @SuppressWarnings("unchecked") + public CodelistSelectionPanel(ResourceBundle res) + { + this.res=res; + setHeaderVisible(false); + new Resizable(this, Dir.E, Dir.SE, Dir.S); + buildPanel(properties.key(), Arrays.>asList(nameColumn, agencyIdColumn, versionColumn, descriptionColumn), nameColumn); + } + + + protected void buildPanel(ModelKeyProvider keyProvider, List> columns, ColumnConfig autoexpandColumn) + { + + ToolBar toolBar = new ToolBar(); + toolBar.add(new LabelToolItem("Search: ")); + final TextField searchField = new TextField(); + toolBar.add(searchField); + + TextButton btnReload = new TextButton(); + //btnReload.setText("Reload"); + btnReload.setIcon(res.refresh_16()); + btnReload.setToolTip("Reload"); + toolBar.add(btnReload); + + + IdentityValueProvider identity = new IdentityValueProvider(); + final CheckBoxSelectionModel sm = new CheckBoxSelectionModel(identity); + + ColumnModel cm = new ColumnModel(columns); + + final ExtendedListStore store = new ExtendedListStore(keyProvider); + + searchField.addKeyUpHandler(new KeyUpHandler() { + + @Override + public void onKeyUp(KeyUpEvent event) { + Log.trace("searchTerm: "+searchField.getCurrentValue()); + store.applyFilters(); + } + }); + + store.addFilter(new StoreFilter() { + + @Override + public boolean select(Store store, Codelist parent, Codelist item) { + String searchTerm = searchField.getCurrentValue(); + if (searchTerm == null) return true; + return CodelistSelectionPanel.this.select(item, searchTerm); + } + }); + + store.setEnableFilters(true); + + RpcProxy> proxy = new RpcProxy>() { + + + public void load(ListLoadConfig loadConfig, final AsyncCallback> callback) { + loadData(loadConfig, callback); + } + }; + final ListLoader> loader = new ListLoader>(proxy); + + loader.setRemoteSort(false); + loader.addLoadHandler(new LoadResultListStoreBinding>(store)); + + grid = new Grid(store, cm){ + @Override + protected void onAfterFirstAttach() { + super.onAfterFirstAttach(); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + loader.load(); + } + }); + } + }; + + sm.setSelectionMode(SelectionMode.SINGLE); + grid.setLoader(loader); + grid.setSelectionModel(sm); + grid.getView().setAutoExpandColumn(autoexpandColumn); + grid.getView().setStripeRows(true); + grid.getView().setColumnLines(true); + grid.getView().setAutoFill(true); + grid.setBorders(false); + grid.setLoadMask(true); + grid.setColumnReordering(true); + + SelectHandler sh = new SelectHandler() { + @Override + public void onSelect(SelectEvent event) { + loader.load(); + } + }; + + btnReload.addSelectHandler(sh); + + VerticalLayoutContainer con = new VerticalLayoutContainer(); + con.add(toolBar, new VerticalLayoutData(1, -1)); + con.add(grid, new VerticalLayoutData(1, 1)); + setWidget(con); + } + + + + protected boolean select(Codelist item, String searchTerm) { + if (item.getName()!=null && item.getName().toLowerCase().contains(searchTerm.toLowerCase())) return true; + if (item.getAgencyId()!=null &&item.getAgencyId().toLowerCase().contains(searchTerm.toLowerCase())) return true; + if (item.getVersion()!=null && item.getVersion().toLowerCase().contains(searchTerm.toLowerCase())) return true; + if (item.getDescription()!=null && item.getDescription().toLowerCase().contains(searchTerm.toLowerCase())) return true; + if (item.getId()!=null &&item.getId().toLowerCase().contains(searchTerm.toLowerCase())) return true; + return false; + } + + + protected void loadData(ListLoadConfig loadConfig, final AsyncCallback> callback) { + TDGXTServiceAsync.INSTANCE.getCodelists(new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + callback.onFailure(caught); + } + + @Override + public void onSuccess(ArrayList result) { + Log.trace("loaded "+result.size()+" codelists"); + callback.onSuccess(new ListLoadResultBean(result)); + } + }); + } + + + @Override + public HandlerRegistration addSelectionHandler(SelectionHandler handler) { + return grid.getSelectionModel().addSelectionHandler(handler); + } + + + + + public Codelist getSelectedItem() { + return grid.getSelectionModel().getSelectedItem(); + } + + protected class ExtendedListStore extends ListStore { + + public ExtendedListStore(ModelKeyProvider keyProvider) { + super(keyProvider); + } + + public void applyFilters() + { + super.applyFilters(); + } + + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetProperties.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetProperties.java new file mode 100644 index 0000000..a436d74 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetProperties.java @@ -0,0 +1,29 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + + + +import org.gcube.portlets.user.td.gxtservice.shared.Dataset; + +import com.google.gwt.editor.client.Editor.Path; +import com.sencha.gxt.core.client.ValueProvider; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.PropertyAccess; + +/** + * @author "Federico De Faveri defaveri@isti.cnr.it" + * + */ +public interface DatasetProperties extends PropertyAccess { + + @Path("id") + ModelKeyProvider key(); + + ValueProvider name(); + ValueProvider agencyId(); + ValueProvider version(); + ValueProvider description(); + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetSelectionPanel.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetSelectionPanel.java new file mode 100644 index 0000000..c74a1eb --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/DatasetSelectionPanel.java @@ -0,0 +1,203 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.gcube.portlets.user.td.gxtservice.client.rpc.TDGXTServiceAsync; +import org.gcube.portlets.user.td.gxtservice.shared.Dataset; + + +import com.allen_sauer.gwt.log.client.Log; +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.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.event.logical.shared.HasSelectionHandlers; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.sencha.gxt.core.client.IdentityValueProvider; +import com.sencha.gxt.data.client.loader.RpcProxy; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.Store; +import com.sencha.gxt.data.shared.Store.StoreFilter; +import com.sencha.gxt.data.shared.loader.ListLoadConfig; +import com.sencha.gxt.data.shared.loader.ListLoadResult; +import com.sencha.gxt.data.shared.loader.ListLoadResultBean; +import com.sencha.gxt.data.shared.loader.ListLoader; +import com.sencha.gxt.data.shared.loader.LoadResultListStoreBinding; +import com.sencha.gxt.widget.core.client.ContentPanel; +import com.sencha.gxt.widget.core.client.Resizable; +import com.sencha.gxt.widget.core.client.Resizable.Dir; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.TextField; +import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel; +import com.sencha.gxt.widget.core.client.grid.ColumnConfig; +import com.sencha.gxt.widget.core.client.grid.ColumnModel; +import com.sencha.gxt.widget.core.client.grid.Grid; +import com.sencha.gxt.widget.core.client.toolbar.LabelToolItem; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class DatasetSelectionPanel extends ContentPanel implements HasSelectionHandlers { + + private static final DatasetProperties properties = GWT.create(DatasetProperties.class); + + protected static final ColumnConfig nameColumn = new ColumnConfig(properties.name(), 50, "Name"); + protected static final ColumnConfig agencyIdColumn = new ColumnConfig(properties.agencyId(), 50, "Agency Id"); + protected static final ColumnConfig versionColumn = new ColumnConfig(properties.version(), 50, "Version"); + protected static final ColumnConfig descriptionColumn = new ColumnConfig(properties.description(), 50, "Description"); + + protected Grid grid; + + @SuppressWarnings("unchecked") + public DatasetSelectionPanel() + { + setHeaderVisible(false); + new Resizable(this, Dir.E, Dir.SE, Dir.S); + buildPanel(properties.key(), Arrays.>asList(nameColumn, agencyIdColumn, versionColumn, descriptionColumn), nameColumn); + } + + + protected void buildPanel(ModelKeyProvider keyProvider, List> columns, ColumnConfig autoexpandColumn) + { + + ToolBar toolBar = new ToolBar(); + toolBar.add(new LabelToolItem("Search: ")); + final TextField searchField = new TextField(); + toolBar.add(searchField); + + IdentityValueProvider identity = new IdentityValueProvider(); + final CheckBoxSelectionModel sm = new CheckBoxSelectionModel(identity); + + ColumnModel cm = new ColumnModel(columns); + + final ExtendedListStore store = new ExtendedListStore(keyProvider); + + searchField.addKeyUpHandler(new KeyUpHandler() { + + @Override + public void onKeyUp(KeyUpEvent event) { + Log.trace("searchTerm: "+searchField.getCurrentValue()); + store.applyFilters(); + } + }); + + store.addFilter(new StoreFilter() { + + @Override + public boolean select(Store store, Dataset parent, Dataset item) { + String searchTerm = searchField.getCurrentValue(); + if (searchTerm == null) return true; + return DatasetSelectionPanel.this.select(item, searchTerm); + } + }); + + store.setEnableFilters(true); + + RpcProxy> proxy = new RpcProxy>() { + + + public void load(ListLoadConfig loadConfig, final AsyncCallback> callback) { + loadData(loadConfig, callback); + } + }; + final ListLoader> loader = new ListLoader>(proxy); + + loader.setRemoteSort(false); + loader.addLoadHandler(new LoadResultListStoreBinding>(store)); + + grid = new Grid(store, cm){ + @Override + protected void onAfterFirstAttach() { + super.onAfterFirstAttach(); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + loader.load(); + } + }); + } + }; + + grid.setLoader(loader); + grid.setSelectionModel(sm); + grid.getView().setAutoExpandColumn(autoexpandColumn); + grid.getView().setStripeRows(true); + grid.getView().setColumnLines(true); + grid.getView().setAutoFill(true); + grid.setBorders(false); + grid.setLoadMask(true); + + grid.setColumnReordering(true); + + VerticalLayoutContainer con = new VerticalLayoutContainer(); + con.add(toolBar, new VerticalLayoutData(1, -1)); + con.add(grid, new VerticalLayoutData(1, 1)); + setWidget(con); + } + + + + protected boolean select(Dataset item, String searchTerm) { + if (item.getName()!=null && item.getName().toLowerCase().contains(searchTerm.toLowerCase())) return true; + if (item.getAgencyId()!=null &&item.getAgencyId().toLowerCase().contains(searchTerm.toLowerCase())) return true; + if (item.getId()!=null &&item.getId().toLowerCase().contains(searchTerm.toLowerCase())) return true; + return false; + } + + + protected void loadData(ListLoadConfig loadConfig, final AsyncCallback> callback) { + TDGXTServiceAsync.INSTANCE.getDatasets(new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + callback.onFailure(caught); + } + + @Override + public void onSuccess(ArrayList result) { + Log.trace("loaded "+result.size()+" datasets"); + callback.onSuccess(new ListLoadResultBean(result)); + } + }); + } + + + @Override + public HandlerRegistration addSelectionHandler(SelectionHandler handler) { + return grid.getSelectionModel().addSelectionHandler(handler); + } + + + public List getSelectedItems() { + return grid.getSelectionModel().getSelectedItems(); + } + + protected class ExtendedListStore extends ListStore { + + public ExtendedListStore(ModelKeyProvider keyProvider) { + super(keyProvider); + } + + public void applyFilters() + { + super.applyFilters(); + } + + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXCodelistSelectionCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXCodelistSelectionCard.java new file mode 100644 index 0000000..ecbcb07 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXCodelistSelectionCard.java @@ -0,0 +1,87 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardCard; +import org.gcube.portlets.user.td.gxtservice.shared.Codelist; +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.user.client.Command; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class SDMXCodelistSelectionCard extends WizardCard { + + protected SDMXCodelistSelectionCard thisCard; + protected SDMXImportSession importSession; + protected CodelistSelectionPanel codelistSelectionPanel; + protected Codelist selectedCodelist=null; + public SDMXCodelistSelectionCard(final SDMXImportSession importSession) { + super("SDMX Codelist selection", ""); + + this.importSession = importSession; + thisCard=this; + + this.codelistSelectionPanel=new CodelistSelectionPanel(res); + + codelistSelectionPanel.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + importSession.setSelectedCodelist(codelistSelectionPanel.getSelectedItem()); + getWizardWindow().setEnableNextButton(true); + } + + + }); + + setContent(codelistSelectionPanel); + + } + + + @Override + public void setup(){ + Command sayNextCard = new Command() { + + @Override + public void execute() { + SDMXTableDetailCard sdmxTableDetailCard = new SDMXTableDetailCard( + importSession); + getWizardWindow() + .addCard(sdmxTableDetailCard); + Log.info("NextCard SDMXTableDetailCard"); + getWizardWindow().nextCard(); + + } + + }; + + getWizardWindow().setNextButtonCommand(sayNextCard); + + + Command sayPreviousCard = new Command() { + public void execute() { + try { + getWizardWindow().previousCard(); + getWizardWindow().removeCard(thisCard); + Log.info("Remove SDMXCodelistSelectionCard"); + } catch (Exception e) { + Log.error("sayPreviousCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setPreviousButtonCommand(sayPreviousCard); + getWizardWindow().setEnableNextButton(false); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDatasetSelectionCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDatasetSelectionCard.java new file mode 100644 index 0000000..d67ceec --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDatasetSelectionCard.java @@ -0,0 +1,57 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardCard; +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; + + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.Command; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class SDMXDatasetSelectionCard extends WizardCard { + + protected SDMXDatasetSelectionCard thisCard; + protected SDMXImportSession importSession; + protected DatasetSelectionPanel datasetSelectionPanel; + + public SDMXDatasetSelectionCard(final SDMXImportSession importSession) { + super("SDMX Dataset selection", ""); + + this.importSession = importSession; + + thisCard=this; + + this.datasetSelectionPanel=new DatasetSelectionPanel(); + + setContent(datasetSelectionPanel); + + } + + + @Override + public void setup(){ + Command sayPreviousCard = new Command() { + public void execute() { + try { + getWizardWindow().previousCard(); + getWizardWindow().removeCard(thisCard); + Log.info("Remove SDMXDatasetSelectionCard"); + + } catch (Exception e) { + Log.error("sayPreviousCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setPreviousButtonCommand(sayPreviousCard); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDocumentSelectionCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDocumentSelectionCard.java new file mode 100644 index 0000000..2f3de8d --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXDocumentSelectionCard.java @@ -0,0 +1,100 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; +import org.gcube.portlets.user.td.gxtservice.shared.document.CodelistDocument; +import org.gcube.portlets.user.td.gxtservice.shared.document.DatasetDocument; +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardCard; + + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.user.client.ui.HasValue; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.sencha.gxt.core.client.util.ToggleGroup; +import com.sencha.gxt.widget.core.client.form.Radio; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class SDMXDocumentSelectionCard extends WizardCard { + + protected final SDMXImportSession importSession; + + final CodelistDocument codelist= CodelistDocument.INSTANCE; + final DatasetDocument dataset= DatasetDocument.INSTANCE; + + public SDMXDocumentSelectionCard(final SDMXImportSession importSession) { + super("SDMX document selection", ""); + + this.importSession = importSession; + //Default + importSession.setSDMXDocument(codelist); + + VerticalPanel documentSelectionPanel = new VerticalPanel(); + documentSelectionPanel.setStylePrimaryName(res.sdmxImportCss().getImportSelectionSources()); + + Radio radioCodelist = new Radio(); + + radioCodelist.setBoxLabel("

"+codelist.getName()+"
"+codelist.getDescription()+"

"); + radioCodelist.setValue(true); + radioCodelist.setName(codelist.getName()); + radioCodelist.setStylePrimaryName(res.sdmxImportCss().getImportSelectionSource()); + + + Radio radioDataSet = new Radio(); + radioDataSet.setBoxLabel("

"+dataset.getName()+"
"+dataset.getDescription()+"

"); + radioDataSet.setName(dataset.getName()); + radioDataSet.setStylePrimaryName(res.sdmxImportCss().getImportSelectionSource()); + radioDataSet.disable(); + + documentSelectionPanel.add(radioCodelist); + documentSelectionPanel.add(radioDataSet); + + + // we can set name on radios or use toggle group + ToggleGroup toggle = new ToggleGroup(); + toggle.add(radioCodelist); + toggle.add(radioDataSet); + + toggle.addValueChangeHandler(new ValueChangeHandler>() { + + @Override + public void onValueChange(ValueChangeEvent> event) { + try { + ToggleGroup group = (ToggleGroup) event.getSource(); + Radio radio = (Radio) group.getValue(); + Log.info("Document Selected:" + radio.getName()); + if (radio.getName().compareTo(codelist.getName()) == 0) { + importSession.setSDMXDocument(codelist); + } else { + if (radio.getName().compareTo(dataset.getName()) == 0) { + importSession.setSDMXDocument(dataset); + } else { + + } + + } + } catch (Exception e) { + Log.error("ToggleGroup: onValueChange " + e.getLocalizedMessage()); + } + + } + }); + + + + setContent(documentSelectionPanel); + + } + + + + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTD.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTD.java new file mode 100644 index 0000000..7910522 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTD.java @@ -0,0 +1,42 @@ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardWindow; +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; + + + + + +/** + * Entry point classes define onModuleLoad(). + */ +public class SDMXImportWizardTD extends WizardWindow { + + protected SDMXImportSession importSession; + + + /** + * The id of the {@link CSVTarget} to use. + * @param targetId + */ + + public SDMXImportWizardTD(String title) { + super(title); + setWidth(550); + setHeight(520); + + importSession= new SDMXImportSession(); + + + SDMXDocumentSelectionCard sdmxdocumentSelection= new SDMXDocumentSelectionCard(importSession); + addCard(sdmxdocumentSelection); + + SourceSelectionCard sourceSelection= new SourceSelectionCard(importSession); + addCard(sourceSelection); + + + + } + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTDEntry.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTDEntry.java new file mode 100644 index 0000000..2473355 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXImportWizardTDEntry.java @@ -0,0 +1,15 @@ +package org.gcube.portlets.user.sdmximportwizardtd.client; + + + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.EntryPoint; + +public class SDMXImportWizardTDEntry implements EntryPoint { + + @Override + public void onModuleLoad() { + SDMXImportWizardTD importWizard= new SDMXImportWizardTD("SDMXImport"); + Log.info(importWizard.getId()); + } +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXOperationInProgressCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXOperationInProgressCard.java new file mode 100644 index 0000000..5a56350 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXOperationInProgressCard.java @@ -0,0 +1,203 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardCard; +import org.gcube.portlets.user.sdmximportwizardtd.client.progress.ImportProgressBarUpdater; +import org.gcube.portlets.user.sdmximportwizardtd.client.progress.OperationProgressListener; +import org.gcube.portlets.user.sdmximportwizardtd.client.progress.OperationProgressUpdater; +import org.gcube.portlets.user.td.gxtservice.client.rpc.TDGXTServiceAsync; +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; +import org.gcube.portlets.user.td.gxtservice.shared.TRId; +import org.gcube.portlets.user.td.gxtservice.shared.source.SDMXRegistrySource; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.FlexTable; +import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter; +import com.google.gwt.user.client.ui.HasVerticalAlignment; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.ProgressBar; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.VBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VBoxLayoutContainer.VBoxLayoutAlign; + +//import com.allen_sauer.gwt.log.client.Log; +//import com.google.gwt.user.client.Command; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class SDMXOperationInProgressCard extends WizardCard implements + OperationProgressListener { + + public static final int STATUS_POLLING_DELAY = 1000; + protected SDMXOperationInProgressCard thisCard; + protected SDMXImportSession importSession; + protected OperationProgressUpdater progressUpdater; + + public SDMXOperationInProgressCard(final SDMXImportSession importSession) { + super("Operation In Progress", ""); + + this.importSession = importSession; + thisCard = this; + + VBoxLayoutContainer operationInProgressPanel = new VBoxLayoutContainer(); + operationInProgressPanel.setVBoxLayoutAlign(VBoxLayoutAlign.CENTER); + + final FlexTable description = new FlexTable(); + FlexCellFormatter cellFormatter = description.getFlexCellFormatter(); + description.setCellSpacing(10); + description.setCellPadding(4); + description.setBorderWidth(0); + + // display:block;vertical-align:text-top; + description.setHTML(0, 0, + "Document: "); + description.setText(0, 1, importSession.getSDMXDocument().getName()); + description.setHTML(1, 0, + "Source: "); + description.setText(1, 1, importSession.getSource().getName()); + + if (importSession.getSource().getId().compareTo("SDMXRegistry") == 0) { + description.setHTML(2, 0, + "Url: "); + description + .setText( + 2, + 1, + ((SDMXRegistrySource) importSession.getSource()) + .getUrl() == null ? "Internal" + : ((SDMXRegistrySource) importSession + .getSource()).getUrl()); + if (importSession.getSDMXDocument().getId().compareTo("codelist") == 0) { + cellFormatter.setVerticalAlignment(3, 0, + HasVerticalAlignment.ALIGN_TOP); + description + .setHTML(3, 0, + "Codelist Selected: "); + final FlexTable codelistDescription = new FlexTable(); + codelistDescription.setBorderWidth(0); + codelistDescription.setCellPadding(4); + codelistDescription.setCellSpacing(10); + + codelistDescription + .setHTML(0, 0, + "Id: "); + codelistDescription.setText(0, 1, importSession + .getSelectedCodelist().getId()); + codelistDescription + .setHTML(1, 0, + "Name: "); + codelistDescription.setText(1, 1, importSession + .getSelectedCodelist().getName()); + codelistDescription + .setHTML(2, 0, + "Agency: "); + codelistDescription.setText(2, 1, importSession + .getSelectedCodelist().getAgencyId()); + codelistDescription + .setHTML(3, 0, + "Version: "); + codelistDescription.setText(3, 1, importSession + .getSelectedCodelist().getVersion()); + + description.setWidget(3, 1, codelistDescription); + } + } + + FramedPanel summary = new FramedPanel(); + summary.setHeadingText("Import Summary"); + summary.setWidth(400); + summary.add(description); + operationInProgressPanel.add(summary, new BoxLayoutData(new Margins(20, + 5, 10, 5))); + + ProgressBar progressBar = new ProgressBar(); + operationInProgressPanel.add(progressBar, new BoxLayoutData( + new Margins(10, 5, 10, 5))); + + progressUpdater = new OperationProgressUpdater(); + progressUpdater.addListener(new ImportProgressBarUpdater(progressBar)); + + progressUpdater.addListener(this); + + setContent(operationInProgressPanel); + + } + + public void importSDMX() { + TDGXTServiceAsync.INSTANCE.importSDMXClientLibraryRequest( + importSession, new AsyncCallback() { + + @Override + public void onSuccess(Void result) { + progressUpdater.scheduleRepeating(STATUS_POLLING_DELAY); + } + + @Override + public void onFailure(Throwable caught) { + showErrorAndHide("Error in importSDMX", + "An error occured in importSDMX", "", caught); + } + }); + } + + @Override + public void setup() { + getWizardWindow().setEnableBackButton(false); + setBackButtonVisible(false); + setNextButtonVisible(false); + getWizardWindow().setEnableNextButton(false); + getWizardWindow().setNextButtonToFinish(); + importSDMX(); + } + + @Override + public void operationInitializing() { + + } + + @Override + public void operationUpdate(float elaborated) { + + } + + @Override + public void operationComplete(final TRId trId) { + // final String tableId,final String tableResourceId) { + + Command sayComplete = new Command() { + public void execute() { + try { + getWizardWindow().close(false); + Log.info("fire Complete: tabular resource " + trId.getId()); + Log.info("fire Complete: tableId " + trId.getTableId()); + + getWizardWindow().fireCompleted(trId); + + } catch (Exception e) { + Log.error("fire Complete :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setNextButtonCommand(sayComplete); + + setNextButtonVisible(true); + getWizardWindow().setEnableNextButton(true); + } + + @Override + public void operationFailed(Throwable caught, String reason, + String failureDetails) { + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXRegistrySelectionCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXRegistrySelectionCard.java new file mode 100644 index 0000000..ce7a131 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXRegistrySelectionCard.java @@ -0,0 +1,210 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardCard; +import org.gcube.portlets.user.td.gxtservice.client.rpc.TDGXTServiceAsync; +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; +import org.gcube.portlets.user.td.gxtservice.shared.source.SDMXRegistrySource; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.NodeList; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.HasValue; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.sencha.gxt.core.client.util.ToggleGroup; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.FieldLabel; +import com.sencha.gxt.widget.core.client.form.Radio; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class SDMXRegistrySelectionCard extends WizardCard { + + protected SDMXImportSession importSession; + protected SDMXRegistrySelectionCard thisCard; + + final TextField url = new TextField(); + + public SDMXRegistrySelectionCard(final SDMXImportSession importSession) { + super("SDMX Registry selection", ""); + + this.importSession = importSession; + thisCard = this; + + VerticalPanel registrySelectionPanel = new VerticalPanel(); + registrySelectionPanel.setStylePrimaryName(res.sdmxImportCss() + .getImportSelectionSources()); + + Radio radioStandardRegistry = new Radio(); + + radioStandardRegistry + .setBoxLabel("

Internal SDMX Registry" + + "
Select this if you want use the Internal Registry

"); + radioStandardRegistry.setValue(true); + radioStandardRegistry.setName("Default"); + radioStandardRegistry.setStylePrimaryName(res.sdmxImportCss() + .getImportSelectionSource()); + + Radio radioUrlRegistry = new Radio(); + radioUrlRegistry + .setBoxLabel("

Another SDMX Registry

"); + radioUrlRegistry.setName("Url"); + radioUrlRegistry.setStylePrimaryName(res.sdmxImportCss() + .getImportSelectionSource()); + + url.setName("sdmxRegistryUrlInpuntField"); + url.setId("sdmxRegistryUrlInputFieldId"); + url.setStylePrimaryName(res.sdmxImportCss() + .getSDMXRegistryUrlInputStyle()); + + final VerticalLayoutContainer vcontainer = new VerticalLayoutContainer(); + vcontainer.add(new FieldLabel(url, "URL"), new VerticalLayoutData(-1, + -1)); + vcontainer.setStylePrimaryName(res.sdmxImportCss() + .getSDMXRegistryUrlStyle()); + vcontainer.setVisible(false); + + NodeList nodel = radioUrlRegistry.getElement() + .getElementsByTagName("SPAN"); + Element span = nodel.getItem(0); + span.appendChild(vcontainer.getElement()); + + registrySelectionPanel.add(radioStandardRegistry); + registrySelectionPanel.add(radioUrlRegistry); + + // we can set name on radios or use toggle group + ToggleGroup toggle = new ToggleGroup(); + toggle.add(radioStandardRegistry); + toggle.add(radioUrlRegistry); + + toggle.addValueChangeHandler(new ValueChangeHandler>() { + + @Override + public void onValueChange(ValueChangeEvent> event) { + try { + ToggleGroup group = (ToggleGroup) event.getSource(); + Radio radio = (Radio) group.getValue(); + Log.info("Registry Selected:" + radio.getName()); + if (radio.getName().compareTo("Url") == 0) { + vcontainer.setVisible(true); + NodeList nodel = radio.getElement() + .getElementsByTagName("SPAN"); + Element span = nodel.getItem(0); + span.appendChild(vcontainer.getElement()); + + Log.info("SDMXRegistry Url"); + Log.info("Input value: " + url.getCurrentValue()); + SDMXRegistrySource r = ((SDMXRegistrySource) importSession + .getSource()); + r.setUrl(null); + Log.info("" + importSession.getSource()); + } else { + vcontainer.setVisible(false); + Log.info("SDMXRegistry Default"); + SDMXRegistrySource r = ((SDMXRegistrySource) importSession + .getSource()); + r.setUrl(null); + Log.info("Input value: " + url.getCurrentValue()); + Log.info("" + importSession.getSource()); + } + } catch (Exception e) { + Log.error("ToggleGroup: onValueChange " + + e.getLocalizedMessage()); + } + + } + }); + + setContent(registrySelectionPanel); + + } + + @Override + public void setup() { + Command sayNextCard = new Command() { + public void execute() { + try { + Log.info("Input value: " + url.getCurrentValue()); + if (importSession.getSource() instanceof SDMXRegistrySource) { + ((SDMXRegistrySource) importSession.getSource()) + .setUrl(url.getCurrentValue()); + + TDGXTServiceAsync.INSTANCE.setSDMXSession( + importSession, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Log.error("SDMXImportSession do not stored " + + caught.getLocalizedMessage()); + } + + @Override + public void onSuccess(Void result) { + Log.info("SDMXImportSession stored"); + } + }); + + if (importSession.getSDMXDocument().getId() + .compareTo("codelist") == 0) { + SDMXCodelistSelectionCard sdmxCodelistSelectionCard = new SDMXCodelistSelectionCard( + importSession); + getWizardWindow() + .addCard(sdmxCodelistSelectionCard); + Log.info("NextCard SDMXCodelistSelectionCard"); + getWizardWindow().nextCard(); + } else { + if (importSession.getSDMXDocument().getId() + .compareTo("dataset") == 0) { + SDMXDatasetSelectionCard sdmxDatasetSelectionCard = new SDMXDatasetSelectionCard( + importSession); + getWizardWindow().addCard( + sdmxDatasetSelectionCard); + Log.info("NextCard SDMXDatasetSelectionCard"); + getWizardWindow().nextCard(); + } else { + + } + } + } else { + Log.error("There is a problem in source selection.Expected SDMXRegistrySource, and found" + + importSession.getSource()); + } + + } catch (Exception e) { + Log.error("sayNextCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setNextButtonCommand(sayNextCard); + + Command sayPreviousCard = new Command() { + public void execute() { + try { + getWizardWindow().previousCard(); + getWizardWindow().removeCard(thisCard); + Log.info("Remove SDMXRegistrySelectionCard"); + + } catch (Exception e) { + Log.error("sayNextCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setPreviousButtonCommand(sayPreviousCard); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXTableDetailCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXTableDetailCard.java new file mode 100644 index 0000000..abae167 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SDMXTableDetailCard.java @@ -0,0 +1,328 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardCard; +import org.gcube.portlets.user.td.gxtservice.shared.TabResource; +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.FieldLabel; +import com.sencha.gxt.widget.core.client.form.FieldSet; +import com.sencha.gxt.widget.core.client.form.TextArea; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class SDMXTableDetailCard extends WizardCard { + + protected SDMXImportSession importSession; + protected SDMXTableDetailCard thisCard; + + protected static final AgenciesProperties agenciesProperties = GWT.create(AgenciesProperties.class); + protected VerticalLayoutContainer p = new VerticalLayoutContainer(); + protected VerticalPanel tableDetailPanel; + + protected TextField name; + protected TextArea description; + protected TextArea rights; + protected TextField agencyName; + + protected TextButton checkButton; + + //protected ComboBox combo=null; + + TabResource detail=new TabResource(); + + + + public SDMXTableDetailCard(final SDMXImportSession importSession) { + super("SDMX Table Detail", ""); + + this.importSession = importSession; + thisCard=this; + + + tableDetailPanel = new VerticalPanel(); + + tableDetailPanel.setSpacing(4); + tableDetailPanel.setWidth("100%"); + tableDetailPanel.setHeight("100%"); + + + FramedPanel form2 = new FramedPanel(); + form2.setHeadingText("Details"); + //form2.setWidth(350); + + FieldSet fieldSet = new FieldSet(); + fieldSet.setHeadingText("Information"); + fieldSet.setCollapsible(false); + form2.add(fieldSet); + + //VerticalLayoutContainer p = new VerticalLayoutContainer(); + fieldSet.add(p); + + name = new TextField(); + name.setAllowBlank(false); + name.setEmptyText("Enter a name..."); + name.setValue(importSession.getSelectedCodelist().getName()); + p.add(new FieldLabel(name, "Name"), new VerticalLayoutData(1, -1)); + + + description = new TextArea(); + description.setAllowBlank(false); + description.setEmptyText("Enter a description..."); + description.setValue(importSession.getSelectedCodelist().getDescription()); + p.add(new FieldLabel(description, "Description"), new VerticalLayoutData(1, -1)); + + rights = new TextArea(); + rights.setEmptyText("Enter rights..."); + rights.setAllowBlank(false); + p.add(new FieldLabel(rights, "Rights"), new VerticalLayoutData(1, -1)); + + /* + ListStore agenciesStore = new ListStore(agenciesProperties.key()); + + RpcProxy> proxy = new RpcProxy>() { + + + public void load(PagingLoadConfig loadConfig, final AsyncCallback> callback) { + loadData(loadConfig, callback); + } + }; + + + final PagingLoader> loader = new PagingLoader>(proxy); + + loader.setRemoteSort(false); + loader.addLoadHandler(new LoadResultListStoreBinding>(agenciesStore)); + + //agenciesStore.addAll(TestData.getStates()); + + combo = new ComboBox(agenciesStore, agenciesProperties.nameLabel()); + addHandlersForEventObservation(combo, agenciesProperties.nameLabel()); + + combo.setLoader(loader); + combo.setEmptyText("Enter Agency..."); + combo.setTriggerAction(TriggerAction.ALL); + combo.setAllowBlank(false); + combo.setForceSelection(true); + combo.setVisible(true); + */ + + + //HorizontalLayoutContainer agenciesSelect= selectAgencies(); + //p.add(new FieldLabel(combo, "Agencies"), new VerticalLayoutData(1, -1)); + + /*FieldLabel comboLabel=new FieldLabel(combo, ""); + comboLabel.setLabelSeparator(""); + p.add(comboLabel, new VerticalLayoutData(1, -1)); + */ + + agencyName = new TextField(); + agencyName.setVisible(true); + agencyName.setEmptyText("Enter Agency..."); + agencyName.setValue(importSession.getSelectedCodelist().getAgencyId()); + FieldLabel agencyNameLabel=new FieldLabel(agencyName, "Agency"); + agencyNameLabel.setLabelSeparator(""); + p.add(agencyNameLabel, new VerticalLayoutData(1, -1)); + + checkButton = new TextButton("Save"); + checkButton.addSelectHandler(new SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + checkData(); + } + }); + form2.addButton(checkButton); + + tableDetailPanel.add(form2); + + setContent(tableDetailPanel); + + } + + protected void checkData() { + if (name.getValue() == null || name.getValue().isEmpty() + || description.getValue() == null + || description.getValue().isEmpty() + || rights.getValue() == null || rights.getValue().isEmpty() + || agencyName.getValue() == null || agencyName.getValue().isEmpty() + ) { + return; + } else { + name.setReadOnly(true); + description.setReadOnly(true); + rights.setReadOnly(true); + agencyName.setReadOnly(true); + checkButton.disable(); + getWizardWindow().setEnableNextButton(true); + } + } + + /*protected void loadData(PagingLoadConfig loadConfig, final AsyncCallback> callback) { + TDGXTServiceAsync.INSTANCE.getAgencies(new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + callback.onFailure(caught); + } + + @Override + public void onSuccess(List result) { + Log.trace("loaded "+result.size()+" agencies"); + for(int i=0; i(result, result.size(), 0)); + } + }); + }*/ + + /** + * Helper to add handlers to observe events that occur on each combobox + + private void addHandlersForEventObservation(final ComboBox combo, final LabelProvider labelProvider) { + combo.addValueChangeHandler(new ValueChangeHandler() { + @Override + public void onValueChange(ValueChangeEvent event) { + + Info.display("Value Changed", "New value: " + + (event.getValue() == null ? combo.getValue() : labelProvider.getLabel(event.getValue()) + "!")); + } + }); + + combo.addSelectionHandler(new SelectionHandler() { + @Override + public void onSelection(SelectionEvent event) { + Info.display("Agency Selected", "You selected " + + (event.getSelectedItem() == null ? combo.getValue() : labelProvider.getLabel(event.getSelectedItem()) + "!")); + } + }); + } + */ + + + @Override + public void setup(){ + Command sayNextCard = new Command() { + + @Override + public void execute() { + detail.setName(name.getCurrentValue()); + //detail.setAgency(combo.getSelectedText()); + detail.setAgency(agencyName.getCurrentValue()); + detail.setDescription(description.getCurrentValue()); + detail.setRight(rights.getCurrentValue()); + + importSession.setTabResource(detail); + SDMXOperationInProgressCard sdmxOperationInProgressCard = new SDMXOperationInProgressCard( + importSession); + getWizardWindow() + .addCard(sdmxOperationInProgressCard); + Log.info("NextCard SDMXOperationInProgressCard"); + getWizardWindow().nextCard(); + + } + + }; + + getWizardWindow().setNextButtonCommand(sayNextCard); + + + Command sayPreviousCard = new Command() { + public void execute() { + try { + getWizardWindow().previousCard(); + getWizardWindow().removeCard(thisCard); + Log.info("Remove SDMXTableDetailCard"); + } catch (Exception e) { + Log.error("sayPreviousCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setPreviousButtonCommand(sayPreviousCard); + getWizardWindow().setEnableNextButton(false); + + } + + + /* + private HorizontalLayoutContainer selectAgencies(){ + + + + HorizontalLayoutContainer documentSelectionPanel = new HorizontalLayoutContainer(); + + Radio radioAgenciesAlready = new Radio(); + + radioAgenciesAlready.setBoxLabel("Present"); + radioAgenciesAlready.setValue(true); + radioAgenciesAlready.setName("Agencies"); + + Radio radioAgencyNew = new Radio(); + radioAgencyNew.setBoxLabel("New"); + radioAgencyNew.setName("AgencyNew"); + + + documentSelectionPanel.add(radioAgenciesAlready); + documentSelectionPanel.add(radioAgencyNew); + + + ToggleGroup toggle = new ToggleGroup(); + toggle.add(radioAgenciesAlready); + toggle.add(radioAgencyNew); + + toggle.addValueChangeHandler(new ValueChangeHandler>() { + + @Override + public void onValueChange(ValueChangeEvent> event) { + try { + ToggleGroup group = (ToggleGroup) event.getSource(); + Radio radio = (Radio) group.getValue(); + Log.info("Document Selected:" + radio.getName()); + if (radio.getName().compareTo("AgencyNew") == 0) { + //agencyName.setVisible(true); + //combo.setVisible(false); + // + } else { + if (radio.getName().compareTo("Agency") == 0) { + //agencyName.setVisible(false); + //combo.setVisible(true); + // + } else { + + } + + } + + } catch (Exception e) { + Log.error("ToggleGroup: onValueChange " + e.getLocalizedMessage()); + } + + } + }); + + return documentSelectionPanel; + + } + */ +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SourceSelectionCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SourceSelectionCard.java new file mode 100644 index 0000000..0bd4172 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/SourceSelectionCard.java @@ -0,0 +1,152 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client; + +import org.gcube.portlets.user.sdmximportwizardtd.client.general.WizardCard; + +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportSession; +import org.gcube.portlets.user.td.gxtservice.shared.source.FileSource; +import org.gcube.portlets.user.td.gxtservice.shared.source.SDMXRegistrySource; +import org.gcube.portlets.user.td.gxtservice.shared.source.WorkspaceSource; + + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.HasValue; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.sencha.gxt.core.client.util.ToggleGroup; +import com.sencha.gxt.widget.core.client.form.Radio; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class SourceSelectionCard extends WizardCard { + + protected final SDMXImportSession importSession; + + final SDMXRegistrySource sdmxRegistrySource= SDMXRegistrySource.INSTANCE; + final FileSource fileSource= FileSource.INSTANCE; + final WorkspaceSource workspaceSource=WorkspaceSource.INSTANCE; + + + public SourceSelectionCard(final SDMXImportSession importSession) { + super("SDMX source selection", ""); + + this.importSession = importSession; + //Default + importSession.setSource(sdmxRegistrySource); + + VerticalPanel sourceSelectionPanel = new VerticalPanel(); + sourceSelectionPanel.setStylePrimaryName(res.sdmxImportCss().getImportSelectionSources()); + + Radio radioSDMXRegistrySource = new Radio(); + + radioSDMXRegistrySource.setBoxLabel("

"+sdmxRegistrySource.getName()+"
"+sdmxRegistrySource.getDescription()+"

"); + radioSDMXRegistrySource.setValue(true); + radioSDMXRegistrySource.setName(sdmxRegistrySource.getName()); + radioSDMXRegistrySource.setStylePrimaryName(res.sdmxImportCss().getImportSelectionSource()); + + Radio radioWorkspaceSource = new Radio(); + radioWorkspaceSource.setBoxLabel("

"+workspaceSource.getName()+"
"+workspaceSource.getDescription()+"

"); + radioWorkspaceSource.setName(workspaceSource.getName()); + radioWorkspaceSource.setStylePrimaryName(res.sdmxImportCss().getImportSelectionSource()); + radioWorkspaceSource.disable(); + + Radio radioFileSource = new Radio(); + radioFileSource.setBoxLabel("

"+fileSource.getName()+"
"+fileSource.getDescription()+"

"); + radioFileSource.setName(fileSource.getName()); + radioFileSource.setStylePrimaryName(res.sdmxImportCss().getImportSelectionSource()); + radioFileSource.disable(); + + sourceSelectionPanel.add(radioSDMXRegistrySource); + sourceSelectionPanel.add(radioWorkspaceSource); + sourceSelectionPanel.add(radioFileSource); + + + // we can set name on radios or use toggle group + ToggleGroup toggle = new ToggleGroup(); + toggle.add(radioSDMXRegistrySource); + toggle.add(radioWorkspaceSource); + toggle.add(radioFileSource); + + toggle.addValueChangeHandler(new ValueChangeHandler>() { + + @Override + public void onValueChange(ValueChangeEvent> event) { + try { + ToggleGroup group = (ToggleGroup) event.getSource(); + Radio radio = (Radio) group.getValue(); + Log.info("Source Selected:" + radio.getName()); + if (radio.getName().compareTo(sdmxRegistrySource.getName()) == 0) { + importSession.setSource(sdmxRegistrySource); + } else { + if (radio.getName().compareTo(workspaceSource.getName()) == 0) { + importSession.setSource(workspaceSource); + } else { + if (radio.getName().compareTo(fileSource.getName()) == 0) { + importSession.setSource(fileSource); + } else { + + } + + } + + } + } catch (Exception e) { + Log.error("ToggleGroup: onValueChange " + e.getLocalizedMessage()); + } + + } + }); + + + setContent(sourceSelectionPanel); + + } + + @Override + public void setup(){ + Command sayNextCard = new Command() { + public void execute() { + try { + String sourceId = importSession.getSource().getId(); + if (sourceId == null || sourceId.isEmpty()) { + Log.error("SDMX Import Source Id: " + sourceId); + } else { + if (sourceId.compareTo("SDMXRegistry") == 0) { + SDMXRegistrySelectionCard sdmxRegistrySelectionCard = new SDMXRegistrySelectionCard( + importSession); + getWizardWindow() + .addCard(sdmxRegistrySelectionCard); + Log.info("NextCard SDMXRegistrySelectionCard"); + getWizardWindow().nextCard(); + } else { + if (sourceId.compareTo("File") == 0) { + + } else { + if (sourceId.compareTo("Workspace") == 0) { + + } else { + + } + } + } + + } + } catch (Exception e) { + Log.error("sayNextCard :" + e.getLocalizedMessage()); + } + } + }; + + getWizardWindow().setNextButtonCommand(sayNextCard); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/ResourceBundle.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/ResourceBundle.java new file mode 100644 index 0000000..c495c08 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/ResourceBundle.java @@ -0,0 +1,25 @@ +package org.gcube.portlets.user.sdmximportwizardtd.client.dataresource; + + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.resources.client.ClientBundle.Source; + +public interface ResourceBundle extends ClientBundle { + + public static final ResourceBundle IMPL=GWT.create(ResourceBundle.class); + + @Source("resources/SDMXImportWizardTD.css") + SDMXImportCSS sdmxImportCss(); + + @Source("resources/arrow-refresh.png") + ImageResource refresh(); + + @Source("resources/arrow-refresh_16.png") + ImageResource refresh_16(); + + @Source("resources/arrow-refresh_32.png") + ImageResource refresh32(); +} + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/SDMXImportCSS.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/SDMXImportCSS.java new file mode 100644 index 0000000..3b156b4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/SDMXImportCSS.java @@ -0,0 +1,39 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.dataresource; + +import com.google.gwt.resources.client.CssResource; + +/** + * @author Federico De Faveri defaveri@isti.cnr.it + * + */ +public interface SDMXImportCSS extends CssResource { + + @ClassName("wizard-title") + public String getWizardTitle(); + + @ClassName("wizard-footer") + public String getWizardFooter(); + + @ClassName("source-selection-hover") + public String getSourceSelectionHover(); + +// @ClassName("column-excluded") +// public String getColumnExcluded(); + + @ClassName("importSelection-sources") + public String getImportSelectionSources(); + + @ClassName("importSelection-source") + public String getImportSelectionSource(); + + @ClassName("sdmxRegistryUrlStyle") + public String getSDMXRegistryUrlStyle(); + + @ClassName("sdmxRegistryUrlInputStyle") + public String getSDMXRegistryUrlInputStyle(); + + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/SimpleWizardCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/SimpleWizardCard.java new file mode 100644 index 0000000..1441172 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/SimpleWizardCard.java @@ -0,0 +1,33 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.general; + +import com.google.gwt.user.client.ui.HTML; +import com.sencha.gxt.widget.core.client.ContentPanel; + +/** + * A simple wizard card. + * @author Federico De Faveri defaveri@isti.cnr.it + */ +public class SimpleWizardCard extends WizardCard { + + /** + * Create a new simple wizard card. + * @param title the card title. + * @param footer the card footer. + * @param content the card content. + */ + public SimpleWizardCard(String title, String footer, String content) { + super(title, footer); + + ContentPanel contentPanel = new ContentPanel(); + contentPanel.setHeaderVisible(false); + HTML htmlContent = new HTML(content); + htmlContent.setStyleName("wizard-simple-content"); + contentPanel.add(htmlContent); + + setContent(contentPanel); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardCard.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardCard.java new file mode 100644 index 0000000..15455d5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardCard.java @@ -0,0 +1,272 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.general; + +import org.gcube.portlets.user.sdmximportwizardtd.client.dataresource.ResourceBundle; +import com.allen_sauer.gwt.log.client.Log; + +import com.google.gwt.user.client.ui.HTML; +import com.sencha.gxt.widget.core.client.Component; +import com.sencha.gxt.widget.core.client.ContentPanel; +import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; + +/** + * Represents a Wizard Card. + * @author Federico De Faveri defaveri@isti.cnr.it + */ +public class WizardCard extends BorderLayoutContainer { + + private WizardWindow wizardWindow; + protected ContentPanel titlePanel; + protected ContentPanel footerPanel; + protected boolean calculateFooter = false; + protected HTML titleHtml; + protected HTML footerHtml; + + final protected ResourceBundle res=ResourceBundle.IMPL; + + /** + * Creates a new wizard card. + * The footer is automatically calculated. + * @param title the card title. + */ + public WizardCard(String title) { + this(title,""); + calculateFooter = true; + } + + /** + * Creates a new wizard card. + * @param title the card title. + * @param footer the card footer. + */ + public WizardCard(String title, String footer) { + Log.info(title); + res.sdmxImportCss().ensureInjected(); + + //add the title panel + titlePanel = new ContentPanel(); + titlePanel.setHeight(30); + titlePanel.setBodyStyle("background-color:#C3D9FF"); + titlePanel.setHeaderVisible(false); + + titleHtml = new HTML(title); + titleHtml.setStylePrimaryName(res.sdmxImportCss().getWizardTitle()); + titlePanel.add(titleHtml); + + setNorthWidget(titlePanel, new BorderLayoutData(30)); + + //add the footer panel + footerPanel = new ContentPanel(); + footerPanel.setHeight(30); + footerPanel.setBodyStyle("background-color:#CDEB8B"); + footerPanel.setHeaderVisible(false); + + footerHtml = new HTML(footer); + footerHtml.setStylePrimaryName(res.sdmxImportCss().getWizardFooter()); + footerPanel.add(footerHtml); + + setSouthWidget(footerPanel, new BorderLayoutData(30)); + + } + + + /** + * {@inheritDoc} + */ + public void setTitle(String title) + { + titleHtml.setHTML("

"+title+"

"); + } + + /** + * Sets the card footer. + * @param footer the footer. + */ + public void setFooter(String footer) + { + footerHtml.setHTML("

"+footer+"

"); + } + + /** + * Sets the card content. + * @param content the card content. + */ + public void setContent(Component content) + { + setCenterWidget(content); + } + + /** + * Sets the card content. + * @param content the card content. + */ + public void setContent(com.google.gwt.user.client.ui.Panel content) + { + setCenterWidget(content); + } + + /** + * Enables the next button. + * @param enable true to enable it, false otherwise. + */ + public void setEnableNextButton(boolean enable) + { + if (wizardWindow!=null){ + wizardWindow.setEnableNextButton(enable); + } + } + + /** + * Enables the back button. + * @param enable true to enable the button, false otherwise. + */ + public void setEnableBackButton(boolean enable) + { + if (wizardWindow!=null){ + wizardWindow.setEnableBackButton(enable); + } + } + + /** + * Sets the next button label. + * @param text the button label. + */ + public void setNextButtonText(String text) + { + if (wizardWindow!=null){ + wizardWindow.setNextButtonText(text); + } + } + + /** + * Sets the back button label. + * @param text the button label. + */ + + public void setBackButtonText(String text) + { + if (wizardWindow!=null){ + wizardWindow.setBackButtonText(text); + } + } + + + /** + * Visible the next button. + * @param visible true to show the button, false otherwise. + */ + public void setNextButtonVisible(boolean visible) + { + if (wizardWindow!=null){ + wizardWindow.setNextButtonVisible(visible); + } + } + + /** + * Visible the back button. + * @param visible true to show the button, false otherwise. + */ + public void setBackButtonVisible(boolean visible) + { + if (wizardWindow!=null){ + wizardWindow.setBackButtonVisible(visible); + } + } + + + public void setNextButtonToFinish() + { + if (wizardWindow!=null){ + wizardWindow.setNextButtonToFinish(); + } + } + + /** + * Sets the WizardWindow for this import card. + * @param wizardWindow the WizardWindow. + */ + protected void setWizardWindow(WizardWindow wizardWindow) + { + this.wizardWindow = wizardWindow; + if (calculateFooter) { + StringBuilder footer = new StringBuilder(); + footer.append("Step "); + footer.append(getCardPosition()); + footer.append(" of "); + footer.append(getCardSize()); + setFooter(footer.toString()); + } + } + + /** + * Returns the current wizard window. + * @return the wizard window. + */ + protected WizardWindow getWizardWindow() + { + if (wizardWindow==null) throw new IllegalStateException("No Wizard Window setup"); + return wizardWindow; + } + + public void addToWindowTitle(String toAdd) + { + wizardWindow.setTitle(wizardWindow.getOriginalTitle()+toAdd); + } + + /** + * Called before the card is showed. + */ + public void setup() + { + } + + /** + * Called when the card is disposed. + */ + public void dispose() + {} + + /** + * Add a listener to the next button. + * @param listener the listener to add. + */ + public void addNextButtonListener(SelectHandler listener) + { + if (wizardWindow!=null){ + wizardWindow.addNextButtonListener(listener); + } + } + + /** + * Gets the number of cards in the wizard window. + * @return the number of cards. + */ + public int getCardSize() + { + return getWizardWindow().getCardStackSize(); + } + + /** + * Returns this card position on card list. + * @return the card position on the card stack. + */ + public int getCardPosition() + { + int indexPosition = getWizardWindow().getCardStack().indexOf(this); + return (indexPosition>=0)?indexPosition+1:indexPosition; + } + + public void showErrorAndHide(String title, final String failureReason, final String failureDetails, final Throwable throwable) + { + wizardWindow.showErrorAndHide(title, failureReason, failureDetails, throwable); + } + + public void hideWindow() + { + wizardWindow.hide(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardListener.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardListener.java new file mode 100644 index 0000000..0838e0c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardListener.java @@ -0,0 +1,33 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.general; + +import org.gcube.portlets.user.td.gxtservice.shared.TRId; + + +/** + * @author "Federico De Faveri defaveri@isti.cnr.it" + * + */ +public interface WizardListener { + + /** + * Called when the wizard is completed without errors + */ + public void completed(TRId id); + + /** + * Called when the wizard has been aborted by the user. + */ + public void aborted(); + + /** + * Called when the something in the wizard is failed. + * @param throwable the exception or null. + * @param reason the failure reason or null. + * @param details the failure details or null. + */ + public void failed(Throwable throwable, String reason, String details); + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardWindow.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardWindow.java new file mode 100644 index 0000000..0f14f94 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/general/WizardWindow.java @@ -0,0 +1,445 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.general; + +import java.util.ArrayList; + +import org.gcube.portlets.user.sdmximportwizardtd.client.util.ErrorMessageBox; +import org.gcube.portlets.user.td.gxtservice.shared.TRId; + + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.Callback; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.Widget; +import com.google.web.bindery.event.shared.SimpleEventBus; +import com.sencha.gxt.core.client.resources.ThemeStyles; +import com.sencha.gxt.widget.core.client.Dialog; +import com.sencha.gxt.widget.core.client.Window; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.CardLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.toolbar.FillToolItem; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; + +/** + * A generic Wizard Window. + * @author Federico De Faveri defaveri@isti.cnr.it + */ +public class WizardWindow extends Window { + + protected ArrayList cardStack = new ArrayList(); + + protected TextButton backButton; + + protected TextButton nextButton; + + protected String originalTitle; + + protected boolean checkBeforeClose = true; + + protected boolean nextCardFinish = false; + + protected Command nextButtonAction = null; + + protected Command previousButtonAction = null; + + protected CardLayoutContainer cardContainer; + + protected ArrayList listeners; + + protected SimpleEventBus eventBus; + + /** + * Create a new Wizard Window with the specified title. + * @param title the wizard window title. + */ + public WizardWindow(String title) + { + super(); + this.eventBus= new SimpleEventBus(); + Log.info(title); + //setModal(true); + setResizable(true); + setCollapsible(true); + + listeners = new ArrayList(); + + setHeadingText(title); + this.originalTitle = title; + + VerticalLayoutContainer container = new VerticalLayoutContainer(); + + cardContainer = new CardLayoutContainer(); + container.add(cardContainer, new VerticalLayoutData(1, 1)); + + ToolBar toolbar = new ToolBar(); + toolbar.addStyleName(ThemeStyles.getStyle().borderTop()); + + backButton = new TextButton("Back"); + backButton.setEnabled(false); + backButton.setTabIndex(1001); + toolbar.add(backButton); + toolbar.add(new FillToolItem()); + + nextButton = new TextButton("Next"); + nextButton.setTabIndex(1000); + toolbar.add(nextButton); + + toolbar.setLayoutData(new VerticalLayoutData(1, -1)); + container.add(toolbar); + + SelectHandler selectionHandler = new SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + TextButton button = (TextButton)event.getSource(); + String btnID = button.getId(); + + if (btnID.equals(backButton.getId())) { + + if(previousButtonAction!=null) previousButtonAction.execute(); + else previousCard(); + } else { + + if (nextButtonAction!=null) nextButtonAction.execute(); + else nextCard(); + } + + } + }; + + backButton.addSelectHandler(selectionHandler); + nextButton.addSelectHandler(selectionHandler); + + setWidget(container); + } + + + + /** + * {@inheritDoc} + */ + @Override + protected void initTools() { + super.initTools(); + + //we can't distinguish between hide and hide with button + /*closeBtn.removeAllListeners(); + closeBtn.addListener(Events.Select, new Listener() { + public void handleEvent(ComponentEvent ce) { + MessageBox.confirm("Confirm", "Are you sure to cancel the operation?", new Listener() { + + @Override + public void handleEvent(MessageBoxEvent be) { + if (be.getButtonClicked().getItemId().equals(Dialog.YES)) { + hide(); + fireAborted(); + } + } + }); + } + });*/ + } + + public void addListener(WizardListener listener) + { + listeners.add(listener); + } + + public void removeListener(WizardListener listener) + { + listeners.remove(listener); + } + + /** + * Shows the next available card. + */ + public void nextCard() + { + + Widget activeItem = cardContainer.getActiveWidget(); + + if (activeItem instanceof WizardCard) ((WizardCard)activeItem).dispose(); + + int cardPos = cardStack.indexOf(activeItem); + + //NEXT -> + + nextButton.setEnabled(true); + backButton.setEnabled(true); + + int newPos=cardPos+1; + + if (newPos == 0) { + //we are moving forward from the first card + backButton.setEnabled(false); + } + + + + nextButtonAction=null; + previousButtonAction=null; + Log.info("cardStack size:"+cardStack.size()); + WizardCard card = cardStack.get(newPos); + cardContainer.setActiveWidget(card); + doLayout(); + if (card instanceof WizardCard) ((WizardCard)card).setup(); + } + + /** + * Shows the previous available card. + */ + public void previousCard() + { + Widget activeItem = cardContainer.getActiveWidget(); + + if (activeItem instanceof WizardCard) ((WizardCard)activeItem).dispose(); + + int cardPos = cardStack.indexOf(activeItem); + + //BACK <- + + nextButton.setEnabled(true); + backButton.setEnabled(true); + + int newPos=cardPos-1; + + + if (newPos == 0) { + backButton.setEnabled(false); + } + + nextButtonAction=null; + previousButtonAction=null; + + WizardCard card = cardStack.get(newPos); + cardContainer.setActiveWidget(card); + doLayout(); + if (card instanceof WizardCard) ((WizardCard)card).setup(); + } + + /** + * Returns the number of available cards. + * @return + */ + public int getCardStackSize() + { + return cardStack.size(); + } + + /** + * Returns the current active card. + * @return + */ + public int getCurrentCard() + { + return cardStack.indexOf(cardContainer.getActiveWidget()); + } + + public boolean checkBeforeClose() + { + return true; + } + + public void close(boolean check) { + checkBeforeClose = check; + hide(); + } + + /** + * Sets the label of next button to "Finish" value and add a close command to it. + */ + public void setNextButtonToFinish() + { + nextButton.setText("Finish"); + nextButtonAction = new Command() { + + public void execute() { + close(false); + } + }; + } + + /** + * Set the command for the next button. + * @param command the command to execute. + */ + public void setNextButtonCommand(Command command) + { + nextButtonAction = command; + } + + + /** + * Set the command for the previous button. + * @param command the command to execute. + */ + public void setPreviousButtonCommand(Command command) + { + previousButtonAction = command; + } + + /** + * {@inheritDoc} + */ + @Override + public void show() { + super.show(); + + Widget activeItem = cardContainer.getActiveWidget(); + + if (activeItem instanceof WizardCard) ((WizardCard)activeItem).setup(); + } + + + + /** + * Set the card list. + * @param cards + */ + public void setCards(ArrayList cards) + { + for (WizardCard card:cards) { + addCard(card); + } + } + + /** + * Adds a card to this wizard. + * @param card the card to add. + */ + public void addCard(WizardCard card) + { + card.setWizardWindow(this); + cardContainer.add(card); + cardStack.add(card); + } + + /** + * Remove a card to this wizard. + * @param card the card to add. + */ + public void removeCard(WizardCard card) + { + cardContainer.remove(card); + cardStack.remove(card); + } + + + /** + * Enables the next button on the wizard. + * @param enable true to enable the next button, false otherwise. + */ + public void setEnableNextButton(boolean enable) + { + nextButton.setEnabled(enable); + } + + /** + * Enables the back button on the wizard. + * @param enable true to enable the back button, false otherwise. + */ + public void setEnableBackButton(boolean enable) + { + backButton.setEnabled(enable); + } + + /** + * Sets the next button label. + * @param text the button label. + */ + protected void setNextButtonText(String text) + { + nextButton.setText(text); + + } + + /** + * Sets the back button label. + * @param text the button label. + */ + protected void setBackButtonText(String text) + { + backButton.setText(text); + } + + /** + * Sets visible next button. + * @param visible + */ + protected void setNextButtonVisible(boolean visible) + { + nextButton.setVisible(visible); + } + + /** + * Sets visible back button. + * @param visible + */ + protected void setBackButtonVisible(boolean visible) + { + backButton.setVisible(visible); + } + + + /** + * Add a listener to the next button. + * @param listener the listener to add. + */ + protected void addNextButtonListener(SelectHandler listener) + { + nextButton.addSelectHandler(listener); + } + + /** + * @return the originalTitle + */ + public String getOriginalTitle() { + return originalTitle; + } + + /** + * Returns the card list. + * @return teh card list. + */ + public ArrayList getCardStack() + { + return cardStack; + } + + public void showErrorAndHide(String title, final String failureReason, final String failureDetails, final Throwable throwable) + { + ErrorMessageBox.showError(title, failureReason, failureDetails, new Callback() { + + @Override + public void onSuccess(Dialog result) { + } + + @Override + public void onFailure(Void reason) { + hide(); + fireFailed(throwable, failureReason, failureDetails); + } + }); + } + + public void fireCompleted(TRId id) + { + for (WizardListener listener:listeners) listener.completed(id); + } + + public void fireAborted() + { + for (WizardListener listener:listeners) listener.aborted(); + } + + public void fireFailed(Throwable throwable, String reason, String details) + { + for (WizardListener listener:listeners) listener.failed(throwable, reason, details); + } +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/ImportProgressBarUpdater.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/ImportProgressBarUpdater.java new file mode 100644 index 0000000..1be3240 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/ImportProgressBarUpdater.java @@ -0,0 +1,87 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.progress; + + + + +import org.gcube.portlets.user.td.gxtservice.shared.TRId; + +import com.allen_sauer.gwt.log.client.Log; +import com.sencha.gxt.widget.core.client.ProgressBar; + +/** + * Updates a {@link ProgressBar} progress and text based on {@link OperationProgressListener} events. + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class ImportProgressBarUpdater implements OperationProgressListener { + + protected ProgressBar progressBar; + //protected FramedPanel operationResult; + //protected WizardWindow wizardWindow; + /** + * Creates a new {@link ProgressBar} updater. + * @param progressBar the {@link ProgressBar} to update. + */ + public ImportProgressBarUpdater(ProgressBar progressBar) { + this.progressBar = progressBar; + //this.wizardWindow = w; + //this.operationResult = operationResult; + } + + + /** + * {@inheritDoc} + */ + @Override + public void operationComplete(TRId trId) {// TODO Auto-generated method stub + Log.info("Import complete"); + progressBar.updateProgress(1, "Import complete."); + /*final FlexTable descriptionResult = new FlexTable(); + descriptionResult.setCellSpacing(10); + descriptionResult.setCellPadding(4); + descriptionResult.setBorderWidth(0); + descriptionResult.setText(0, 0, "Result: "); + descriptionResult.setText(0, 1, "Import complete"); + + operationResult.add(descriptionResult); + operationResult.setVisible(true); + */ + //wizardWindow.setEnableNextButton(true); + + + } + + /** + * {@inheritDoc} + */ + @Override + public void operationFailed(Throwable caught, String reason, String failureDetails) { + Log.info("Import failed"); + progressBar.updateText("Import failed."); + } + + @Override + public void operationInitializing() { + Log.info("Inport inizializing"); + progressBar.updateProgress(0, "initializing..."); + } + + @Override + public void operationUpdate(float elaborated) { + Log.info("Import elaborated: "+elaborated); + if (elaborated == 0) progressBar.updateProgress(0, "initializing..."); + if (elaborated>0 && elaborated<1) { + Log.trace("progress "+elaborated); + int elab=new Float(elaborated*100).intValue(); + progressBar.updateProgress(elaborated,elab+"% importing..."); + } + if (elaborated == 1) progressBar.updateProgress(1, "completing..."); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressListener.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressListener.java new file mode 100644 index 0000000..a082602 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressListener.java @@ -0,0 +1,42 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.progress; + +import org.gcube.portlets.user.td.gxtservice.shared.TRId; + + + +/** + * Defines a listener for operation progress. + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public interface OperationProgressListener { + + /** + * Called when the operation is starting. + */ + public void operationInitializing(); + + /** + * Called when there is a progress for the operation. + * @param elaborated the elaborated part. + */ + public void operationUpdate(float elaborated); + + + /** + * Called when the operation is complete. + */ + public void operationComplete(TRId trId); + + /** + * Called when the operation is failed. + * @param caught the failure exception. + * @param reason the failure reason. + */ + public void operationFailed(Throwable caught, String reason, String failureDetails); +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressUpdater.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressUpdater.java new file mode 100644 index 0000000..6ffeaae --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/progress/OperationProgressUpdater.java @@ -0,0 +1,131 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.progress; + +import java.util.ArrayList; + +import org.gcube.portlets.user.td.gxtservice.client.rpc.TDGXTServiceAsync; +import org.gcube.portlets.user.td.gxtservice.shared.sdmx.SDMXImportMonitor; +import org.gcube.portlets.user.td.gxtservice.shared.TRId; + + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * This {@link Timer} retrieves {@link OperationProgress} from the specified {@link OperationProgressSource} with the scheduled interval. + * The retrieved information are spread to the subscribed {@link OperationProgressListener}. + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class OperationProgressUpdater extends Timer { + + protected ArrayList listeners = new ArrayList(); + + + /** + * {@inheritDoc} + */ + @Override + public void run() { + Log.debug("requesting operation progress"); + TDGXTServiceAsync.INSTANCE.getSDMXImportMonitor(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + cancel(); + Log.error("Error retrieving the operation state", caught); + String message = getStack(caught); + fireOperationFailed(caught, "Failed getting operation updates", message); + } + + @Override + public void onSuccess(SDMXImportMonitor result) { + Log.info("retrieved ImportMonitor: "+result.getStatus()); + switch (result.getStatus()) { + case WAITING: + break; + case INITIALIZING: + fireOperationInitializing(); + break; + case IN_PROGRESS: + fireOperationUpdate(result.getProgress()); + break; + case FAILED: + cancel(); + fireOperationFailed(result.getError(),"Failed Client Library Import", result.getStatusDescription()); + break; + case SUCCEDED: + cancel(); + Log.info("Import fisnish TableId :"+result.getTrId()); + fireOperationComplete(result.getTrId()); + break; + case ABORTED: + cancel(); + break; + default: + break; + } + + } + + + + + + }); + + + + } + + protected String getStack(Throwable e) + { + String message = e.getLocalizedMessage()+" ->
"; + Throwable c = e.getCause(); + if (c!=null) message += getStack(c); + return message; + } + + protected void fireOperationInitializing() + { + for (OperationProgressListener listener:listeners) listener.operationInitializing(); + } + + protected void fireOperationUpdate(float elaborated) + { + for (OperationProgressListener listener:listeners) listener.operationUpdate(elaborated); + } + + protected void fireOperationComplete(TRId trId) + { + for (OperationProgressListener listener:listeners) listener.operationComplete(trId); + } + + protected void fireOperationFailed(Throwable caught, String failure, String failureDetails) + { + for (OperationProgressListener listener:listeners) listener.operationFailed(caught, failure, failureDetails); + } + + /** + * Add a new {@link OperationProgressListener} to this {@link OperationProgressUpdater}. + * @param listener the listener to add. + */ + public void addListener(OperationProgressListener listener) + { + listeners.add(listener); + } + + /** + * Removes the specified {@link OperationProgressListener} from this {@link OperationProgressUpdater}. + * @param listener the listener to remove. + */ + public void removeListener(OperationProgressListener listener) + { + listeners.remove(listener); + } +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/ErrorMessageBox.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/ErrorMessageBox.java new file mode 100644 index 0000000..df1d22e --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/ErrorMessageBox.java @@ -0,0 +1,70 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.util; + +import com.google.gwt.core.client.Callback; +import com.google.gwt.user.client.ui.Label; +import com.sencha.gxt.widget.core.client.Dialog; +import com.sencha.gxt.widget.core.client.Dialog.PredefinedButton; +import com.sencha.gxt.widget.core.client.box.MessageBox; +import com.sencha.gxt.widget.core.client.event.HideEvent; +import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler; + +/** + * @author "Federico De Faveri defaveri@isti.cnr.it" + * + */ +public class ErrorMessageBox { + + + private static final String DETAILS = "Details"; + + + public static void showError(String title, String failureReason, final String failureDetails) + { + showError(title, failureReason, failureDetails, new NOPCallBack()); + } + + public static void showError(String title, String failureReason, final String failureDetails, final Callback callback) + { + final MessageBox box = new MessageBox(title); + box.setMessage(failureReason); + box.addHideHandler(new HideHandler() { + + @Override + public void onHide(HideEvent event) { + Dialog dialog = (Dialog) event.getSource(); + + if (dialog.getHideButton().getText().equals(DETAILS)){ + //box.close(); + showErrorDetails("Error details", failureDetails); + } else callback.onSuccess(dialog); + } + }); + /*FIXME box.setIcon(MessageBox.ERROR); + box.getDialog().cancelText = DETAILS; + box.getDialog().setButtons(MessageBox.OKCANCEL);*/ + box.show(); + } + + public static void showErrorDetails(String title, String failureDetails) + { + final Dialog simple = new Dialog(); + simple.setHeadingText(title); + simple.setPredefinedButtons(PredefinedButton.OK); + simple.setBodyStyleName("pad-text"); + + + simple.add(new Label("
"+failureDetails+"
")); + //simple.getItem(0).getFocusSupport().setIgnore(true); + + //FIXME simple.setScrollMode(ScrollMode.AUTO); + + simple.setHideOnButtonClick(true); + simple.setWidth(400); + simple.setHeight(400); + simple.show(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/Format.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/Format.java new file mode 100644 index 0000000..4b497b2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/Format.java @@ -0,0 +1,35 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.util; + +/** + * @author Federico De Faveri defaveri@isti.cnr.it + * + */ +public class Format { + + /** + * Converts a file size into a {@link String} representation adding the misure unit. + * @param size the file size. + * @return the textual representation. + */ + public static String fileSize(long size) { + StringBuilder text = new StringBuilder(); + if (size < 1024) { + text.append(size); + text.append(" bytes"); + } else if (size < 1048576) { + text.append(Math.round(((size * 10) / 1024)) / 10); + text.append(" KB"); + } else if (size < 1073741824) { + text.append(Math.round(((size * 10) / 1048576)) / 10); + text.append(" MB"); + } else { + text.append(Math.round(((size * 10) / 1073741824)) / 10); + text.append(" GB"); + } + return text.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/NOPCallBack.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/NOPCallBack.java new file mode 100644 index 0000000..5e0f536 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/NOPCallBack.java @@ -0,0 +1,20 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.util; + +import com.google.gwt.core.client.Callback; + +/** + * @author "Federico De Faveri defaveri@isti.cnr.it" + * + */ +public class NOPCallBack implements Callback { + + @Override + public void onFailure(F reason) {} + + @Override + public void onSuccess(T result) {} + +} diff --git a/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/WizardResources.java b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/WizardResources.java new file mode 100644 index 0000000..6313ed8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/sdmximportwizardtd/client/util/WizardResources.java @@ -0,0 +1,32 @@ +/** + * + */ +package org.gcube.portlets.user.sdmximportwizardtd.client.util; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; + +/** + * @author Federico De Faveri defaveri@isti.cnr.it + * + */ +public interface WizardResources extends ClientBundle { + + public static final WizardResources INSTANCE = GWT.create(WizardResources.class); + +/* @Source("org/gcube/portlets/user/csvimportwizardgxt3/client/util/resources/accept.png") + ImageResource csvCheckSuccess(); + + @Source("org/gcube/portlets/user/csvimportwizardgxt3/client/util/resources/error.png") + ImageResource csvCheckFailure(); + + @Source("org/gcube/portlets/user/csvimportwizardgxt3/client/util/resources/loading.gif") + ImageResource loading(); + + @Source("org/gcube/portlets/user/csvimportwizardgxt3/client/util/resources/information.png") + ImageResource information(); + + @Source("org/gcube/portlets/user/csvimportwizardgxt3/client/util/resources/Wizard.css") + WizardCss wizardCss(); +*/ +} diff --git a/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTD.gwt.xml b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTD.gwt.xml new file mode 100644 index 0000000..68001f7 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTD.gwt.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages.properties b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages.properties new file mode 100644 index 0000000..c222555 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages.properties @@ -0,0 +1,2 @@ +sendButton = Send +nameField = Enter your name \ No newline at end of file diff --git a/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages_fr.properties b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages_fr.properties new file mode 100644 index 0000000..b4a7627 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/Messages_fr.properties @@ -0,0 +1,2 @@ +sendButton = Envoyer +nameField = Entrez votre nom \ No newline at end of file diff --git a/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/SDMXImportWizardTD.css b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/SDMXImportWizardTD.css new file mode 100644 index 0000000..9f59b1d --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/SDMXImportWizardTD.css @@ -0,0 +1,54 @@ +@CHARSET "UTF-8"; + + +.wizard-title { + padding: 5px; + font-weight: bold; + font-size: small; + background-color: #C3D9FF; +} + +.wizard-footer { + padding: 5px; + font-weight: bold; + font-size: small; + text-align: right; + background-color: #CDEB8B +} + +.source-selection-hover:hover { + cursor: pointer; +} + + + +/*.column-excluded { + background-color: #e6e0da !important; + color: #bfa698; +}*/ + +.importSelection-sources { + padding: 30px; + display: block; + margin-top: 20px; + +} + +.importSelection-source { + padding-bottom: 20px; +} + + + +.sdmxRegistryUrlStyle { + padding-top:5px; +} + +.sdmxRegistryUrlInputStyle { + width:300px!important; +} + + +input#sdmxRegistryUrlInputFieldId-input { + width:300px!important; +} diff --git a/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/arrow-refresh.png b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/arrow-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..764f995d7731cb1e71c23f80419e6b47981f06f6 GIT binary patch literal 984 zcmV;}11J26P)UK~zYIrIlZ3n^hRbpD)RhwCR#1VXW(%d`-I>>z|=Ff~+(+wRqKm zxKd=`D$4N6I|qXEs*0$HhzR2FLM(VwHWy0Y$L`dkBp9fHDb0i*R>r1Ax%+CjGn%?$hHJ%1Cc=3 zRH70ir-xgL7>zoQpFR3CwDFuxJqRuLkqnRmAwex5iAQ6PA-8%9spX^vjri1wY3rT> zubdq_U{gLLIp}qJ5%h+z!@UC(fe1kjh!7%zy^$XHy*{Ltl1MJ4EM=(p^of}*BI^R< z-;E8z=9JIv51Ww~qMcC)1R?@~1Eok^-`zI3m_%|RX;Cvi{n|zm4*-mR^Flvt`%KWc zEA+sg0k{lTd+@q%k_~I%aT@#c4tGarpnCuY9JnTtD`Ziu6r8gcfI^4>LSj$28$PcW z$;BjY+`M5yux0fC;5k0^{9#fK^>rVB0RsY}P$^(;VGhM|5hNjWR=8eh3U+n|v5>jh z5)J?!p>Z_e?LyEOgg~IQ!e#3+Dz!?Dns2!2`f_so%yNCwvmYOR{g0*8L?)kU2?qd= z1`k1iKl2tyV72rQDzyrz<;|~O{Px|3StQzlJ2lYKb6c$-U&uqWvwf1#HT6ZaB$92x zfhG@abBug4Y}Tlr`To@(K5aDq)H_e~RBQH9eU1LB-5pOmaHUlOS|*##sVe&zDcBv^ zjX#LMuK6?UcI!zi|Vg#praE9A3BJxKo?p6*zpFa->pKQ2;dU$MK48>{*W{(N# zwO8%501(<4LL?G}VHh9;%2v2CHwTc3-`<=5af`raI3e(R{pi2HzoAvIu1_h2i@#jL zoz>O6LA(sCTgBa|paK_N8ef!+0izi#n zZxk*6$ulQsEhvenvl&aIvETnM0RWgeHEU^c#i_;Gj=;Z(m8-)-a!ZQ<0000k}@P)!zsI^oFu^eLtRk2V!i)n@$RxIgIMoHpcTS{|^*cF_{n60zQX00O7z z>L;lelMMptr&pq7df8B*_fWJaiY*;oP)dP9PzVtLg>Z^4+(k#vPQ3ar;+vQ~)45(Q z%?)hdGZ^XK0fLYUv6f5`2nl*rwHNr-y^z|L3d^WEayap3bO(k@ES3CnK z%sca_HH^l7q~U{75O?!B@3jg5!?%v<)3=AEC7_);p%3eJaDM@v$~&2NCw$ld0000< KMNUMnLSTYm0R)}^ literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/arrow-refresh_32.png b/src/main/resources/org/gcube/portlets/user/sdmximportwizardtd/client/dataresource/resources/arrow-refresh_32.png new file mode 100644 index 0000000000000000000000000000000000000000..f3521ea5e0d148384d82c3cba4376972090af7f6 GIT binary patch literal 1182 zcmV;P1Y!G$P)wK~z|UwU%8>TXh)5pK}h{F>r;#a2qh7O*95Kj84sVVF)0>j3^p4 z+l*P3Eir0LTz2J!<8Y-HvXPiwPGd;)!W+UC21FUogb~TIiJNG@z%fz>w6Ox~fS&j9 zq93%-(+`60&1wHVeSgpYJ@0v+Kd?n{?7O!1&HPW@DgiX8zuo<6&LXxPhL`+uFTI{=s0ET(5DM0+0|3RW)->y1X^LMNzi6%mh zaL+wATz6f7fsXz&!@8M(JOGF`TtT(1IvGylVK{`T*(vxJ{dn;3!CC`~#6L%NN;DmK zIVU&(CT!i#wJy1XDI_V6P48>^{5k7tSZfwB&QVyQ zC<>l*Jdrdd@Bi(KG`L7#Ry~jix0l;7Ffw3j$%#WsRW;N-y&q*e%i;qrY#10C`VpZ} zC>&PRnv4}#50B4^H1K>&K1xeUVXv~ovdxk-UA-PRLZJ{K{CfP0@q1}2U%2{A+r%9-)=6PIEb&5ZB7;vIH0S1EyDpq>PZt;Go^ zAoH_9IBZ~fIfVIuAKu9++`M%Q{&_zr{8ym7HGcm0?nF+;x1hQ6C7r_dno0*8d+h*- zD_8r?EqUVsHY^6e(kS|kXxS6Pv;wj44E{B2Z`!N)|MAz8fX!-y)9XwJUlI|okYkES zS6I_N__g!)x4zN&#Z>vT_JW4b4(TFncU0No^t$l#*FO))9Z>% wu`P<6%;?&uqdEm0*?7VK8i&pv(6=hre}=nUJq4NLMgRZ+07*qoM6N<$f|YC_5&!@I literal 0 HcmV?d00001 diff --git a/src/main/webapp/SDMXImportWizardTD.css b/src/main/webapp/SDMXImportWizardTD.css new file mode 100644 index 0000000..7aca7ac --- /dev/null +++ b/src/main/webapp/SDMXImportWizardTD.css @@ -0,0 +1,34 @@ +/** Add css rules here for your application. */ + + +/** Example rules used by the template application (remove for your app) */ +h1 { + font-size: 2em; + font-weight: bold; + color: #777777; + margin: 40px 0px 70px; + text-align: center; +} + +.sendButton { + display: block; + font-size: 16pt; +} + +/** Most GWT widgets already have a style name defined */ +.gwt-DialogBox { + width: 400px; +} + +.dialogVPanel { + margin: 5px; +} + +.serverResponseLabelError { + color: red; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} diff --git a/src/main/webapp/SDMXImportWizardTD.html b/src/main/webapp/SDMXImportWizardTD.html new file mode 100644 index 0000000..5057b47 --- /dev/null +++ b/src/main/webapp/SDMXImportWizardTD.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + Web Application Starter Project + + + + + + + + + + + + + + + + + + + + + + +

Web Application Starter Project

+ + + + + + + + + + + + +
Please enter your name:
+ + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..90bcd5e --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,34 @@ + + + + + + + + SDMXImportWizardService + org.gcube.portlets.user.sdmximportwizardtd.server.SDMXImportWizardServiceImpl + + + + jUnitHostImpl + com.google.gwt.junit.server.JUnitHostImpl + + + + + SDMXImportWizardService + sdmximportwizard/SDMXImportWizardService + + + jUnitHostImpl + SDMXAgenciesManagerWidgets/junithost/* + + + + + SDMXImportWizardTD.html + + + diff --git a/src/test/java/org/gcube/portlets/user/sdmximportwizardtd/client/GwtTestSDMXImportWizardTD.java b/src/test/java/org/gcube/portlets/user/sdmximportwizardtd/client/GwtTestSDMXImportWizardTD.java new file mode 100644 index 0000000..7c544e4 --- /dev/null +++ b/src/test/java/org/gcube/portlets/user/sdmximportwizardtd/client/GwtTestSDMXImportWizardTD.java @@ -0,0 +1,67 @@ +package org.gcube.portlets.user.sdmximportwizardtd.client; + + + +import com.google.gwt.core.client.GWT; +import com.google.gwt.junit.client.GWTTestCase; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.rpc.ServiceDefTarget; + +/** + * GWT JUnit integration tests must extend GWTTestCase. + * Using "GwtTest*" naming pattern exclude them from running with + * surefire during the test phase. + * + * If you run the tests using the Maven command line, you will have to + * navigate with your browser to a specific url given by Maven. + * See http://mojo.codehaus.org/gwt-maven-plugin/user-guide/testing.html + * for details. + */ +public class GwtTestSDMXImportWizardTD extends GWTTestCase { + + /** + * Must refer to a valid module that sources this class. + */ + public String getModuleName() { + return "org.gcube.portlets.user.SDMXImportWizardTD.SDMXImportWizardTDJUnit"; + } + + + /** + * This test will send a request to the server using the greetServer method in + * GreetingService and verify the response. + */ + public void testGreetingService() { + // Create the service that we will test. + //GreetingServiceAsync greetingService = GWT.create(GreetingService.class); + //ServiceDefTarget target = (ServiceDefTarget) greetingService; + //target.setServiceEntryPoint(GWT.getModuleBaseURL() + "SDMXImportWizardTD/greet"); + + // Since RPC calls are asynchronous, we will need to wait for a response + // after this test method returns. This line tells the test runner to wait + // up to 10 seconds before timing out. + //delayTestFinish(10000); + + // Send a request to the server. + /* greetingService.greetServer("GWT User", new AsyncCallback() { + public void onFailure(Throwable caught) { + // The request resulted in an unexpected error. + fail("Request failure: " + caught.getMessage()); + } + + + public void onSuccess(String result) { + // Verify that the response is correct. + assertTrue(result.startsWith("Hello, GWT User!")); + + // Now that we have received a response, we need to tell the test runner + // that the test is complete. You must call finishTest() after an + // asynchronous test finishes successfully, or the test will time out. + finishTest(); + } + });*/ + + } + + +} diff --git a/src/test/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTDJUnit.gwt.xml b/src/test/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTDJUnit.gwt.xml new file mode 100644 index 0000000..71a16d9 --- /dev/null +++ b/src/test/resources/org/gcube/portlets/user/sdmximportwizardtd/SDMXImportWizardTDJUnit.gwt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/templates/INSTALL b/templates/INSTALL new file mode 100644 index 0000000..e69de29 diff --git a/templates/LICENSE b/templates/LICENSE new file mode 100644 index 0000000..cc51139 --- /dev/null +++ b/templates/LICENSE @@ -0,0 +1,6 @@ +gCube System - License +------------------------------------------------------------ + +The gCube/gCore software is licensed as Free Open Source software conveying to the EUPL (http://ec.europa.eu/idabc/eupl). +The software and documentation is provided by its authors/distributors "as is" and no expressed or +implied warranty is given for its use, quality or fitness for a particular case. \ No newline at end of file diff --git a/templates/MAINTAINERS b/templates/MAINTAINERS new file mode 100644 index 0000000..0bc9be3 --- /dev/null +++ b/templates/MAINTAINERS @@ -0,0 +1 @@ +Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" diff --git a/templates/README b/templates/README new file mode 100644 index 0000000..e81341a --- /dev/null +++ b/templates/README @@ -0,0 +1,40 @@ +The gCube System - ${name} +------------------------------------------------------------ + +This work has been supported by the following European projects: iMarine (FP7-INFRASTRUCTURES-2011-2) + +Authors +------- + +Giancarlo Panichi (giancarlo.panichi@isti.cnr.it), CNR Pisa, +Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" + + +Version and Release Date +------------------------ + +v. ${version} (${release.date}) + +Description +----------- + +${project.description} + +Download information +-------------------- +Source code URL: ${scm.url} + + +Documentation +------------- + +${project.description} + + +Licensing +--------- + +This software is licensed under the terms you may find in the file named "LICENSE" in this directory. + + + diff --git a/templates/changelog.xml b/templates/changelog.xml new file mode 100644 index 0000000..17785ff --- /dev/null +++ b/templates/changelog.xml @@ -0,0 +1,6 @@ + + + First Release + + \ No newline at end of file diff --git a/templates/descriptor.xml b/templates/descriptor.xml new file mode 100644 index 0000000..b978636 --- /dev/null +++ b/templates/descriptor.xml @@ -0,0 +1,39 @@ + + servicearchive + + tar.gz + + / + + + ${distroDirectory} + / + true + + README + LICENSE + INSTALL + MAINTAINERS + changelog.xml + + 755 + + + + + ${distroDirectory}/svnpath.txt + /${artifactId} + + + ${configDirectory}/profile.xml + / + + + target/${build.finalName}.${packaging} + /${artifactId} + + + \ No newline at end of file diff --git a/templates/profile.xml b/templates/profile.xml new file mode 100644 index 0000000..ffa3274 --- /dev/null +++ b/templates/profile.xml @@ -0,0 +1,29 @@ + + + + Service + + ${project.description} + PortletsUser + ${project.name} + 1.0.0 + + + ${project.description} + ${project.name} + ${version} + + ${project.groupId} + ${project.artifactId} + ${project.version} + + library + + ${project.build.finalName}.${project.packaging} + + + + + + + diff --git a/templates/svnpath.txt b/templates/svnpath.txt new file mode 100644 index 0000000..dcd0d22 --- /dev/null +++ b/templates/svnpath.txt @@ -0,0 +1 @@ +${scm.url} \ No newline at end of file