diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteCustomFieldEventHandler.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteCustomFieldEventHandler.java index 6e5b2b4..f029d97 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteCustomFieldEventHandler.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteCustomFieldEventHandler.java @@ -2,10 +2,20 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.events; import com.google.gwt.event.shared.EventHandler; + /** - * Handler associated to the DeleteCustomFieldEvent - * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) + * The Interface DeleteCustomFieldEventHandler. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Feb 12, 2024 */ public interface DeleteCustomFieldEventHandler extends EventHandler { + + /** + * On remove entry. + * + * @param event the event + */ void onRemoveEntry(DeleteCustomFieldEvent event); } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/CreateDatasetForm.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/CreateDatasetForm.java index 5f3038e..4a96e7a 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/CreateDatasetForm.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/CreateDatasetForm.java @@ -19,6 +19,7 @@ import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteCu import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteCustomFieldEventHandler; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.metadata.CustomFieldEntry; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources.AddResourceToDataset; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources.AddedResourcesSummary; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.utils.InfoIconsLabels; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.utils.WizardCreator; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.workspace.SelectResourceByWEMainPanel; @@ -29,7 +30,6 @@ import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetada import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.CategoryPanel; import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.MetaDataFieldSkeleton; import org.gcube.portlets.widgets.mpformbuilder.client.ui.resources.AddResourceContainer; -import org.gcube.portlets.widgets.mpformbuilder.client.ui.resources.AddedResourcesSummary; import org.gcube.portlets.widgets.mpformbuilder.client.ui.tags.TagsPanel; import org.gcube.portlets.widgets.mpformbuilder.shared.license.LicenseBean; import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.CategoryWrapper; @@ -1280,7 +1280,7 @@ public class CreateDatasetForm extends Composite { createDatasetMainPanel.clear(); // TabPanelException - tabPanel = new TabPanel(Tabs.ABOVE); + tabPanel = new TabPanel(Tabs.LEFT); tabPanel.setWidth("100%"); // add the form diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/UpdateDatasetForm.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/UpdateDatasetForm.java index 5e4d38d..9d215b8 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/UpdateDatasetForm.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/form/UpdateDatasetForm.java @@ -13,25 +13,26 @@ import java.util.Set; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanMetadataPublisher; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherService; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherServiceAsync; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.AddResourceEvent; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEvent; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEventHandler; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteCustomFieldEvent; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteCustomFieldEventHandler; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.metadata.CustomFieldEntry; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources.AddResourceToDataset; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources.AddedResourcesSummary; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.utils.InfoIconsLabels; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.utils.WizardCreator; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.workspace.SelectResourceByWEMainPanel; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.DatasetBean; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.MetadataProfileBeanForUpdate; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.OrganizationBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; import org.gcube.portlets.widgets.mpformbuilder.client.form.MetaDataField; -import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm; import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm.OPERATION; import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.CategoryPanel; import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.MetaDataFieldSkeleton; import org.gcube.portlets.widgets.mpformbuilder.client.ui.resources.AddResourceContainer; -import org.gcube.portlets.widgets.mpformbuilder.client.ui.resources.AddedResourcesSummary; import org.gcube.portlets.widgets.mpformbuilder.client.ui.tags.TagsPanel; import org.gcube.portlets.widgets.mpformbuilder.shared.license.LicenseBean; import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.CategoryWrapper; @@ -364,7 +365,7 @@ public class UpdateDatasetForm extends Composite { * @param datasetIdOrName the item id * @param operation the operation */ - private void updateDatasetFormBody(final HandlerManager eventBus, String datasetIdOrName, + private void updateDatasetFormBody(final HandlerManager eventBus, final String datasetIdOrName, final OPERATION operation) { initWidget(uiBinder.createAndBindUi(this)); @@ -374,7 +375,7 @@ public class UpdateDatasetForm extends Composite { iconSpinner.setSpin(true); iconSpinner.getElement().getStyle().setMarginLeft(5, Unit.PX); - List listOfSteps = Arrays.asList("Edit Common Metadata", "Edit Item Specific Metadata & Publish"); + List listOfSteps = Arrays.asList("Edit Common Metadata", "Edit Item Specific Metadata & Update"); this.wizCreator = new WizardCreator(listOfSteps); wizardCreatorPanel.add(wizCreator); @@ -494,9 +495,11 @@ public class UpdateDatasetForm extends Composite { // bean.getResourceRoot()); // } - if (bean.getResourceRoot() != null) + // The resource root is the folder id. Es. ID of the Workspace Root folder. + if (bean.getResourceRoot() != null) { resourcesSelectByWEMainPanel = new SelectResourceByWEMainPanel( bean.getResourceRoot()); + } // set organizations List organizations = bean.getOrganizationList(); @@ -646,6 +649,9 @@ public class UpdateDatasetForm extends Composite { false); continueButton.setEnabled(true); resetButton.setEnabled(true); + + manageAddResources(bean, + datasetIdOrName); } } @@ -711,8 +717,8 @@ public class UpdateDatasetForm extends Composite { * * @param operation the operation */ - - //NEVER USED IN UPDATE MODE + + // NEVER USED IN UPDATE MODE private void organizationsListboxChangeHandlerBody(OPERATION operation) { // remove any other product profiles @@ -832,7 +838,7 @@ public class UpdateDatasetForm extends Composite { * @param operation the operation */ private void prepareMetadataList(final DatasetBean receivedBean, OPERATION operation) { - + // the profile should be one List profiles = receivedBean.getMetadataList(); @@ -898,6 +904,7 @@ public class UpdateDatasetForm extends Composite { DomEvent.fireNativeEvent(Document.get().createChangeEvent(), metadataTypeListbox); } } + }); } @@ -1356,57 +1363,7 @@ public class UpdateDatasetForm extends Composite { updateButton.setVisible(false); // if we are in the "general case" we need to show a form for adding resources - if (!isWorkspaceRequest) { - - try { - // show the add resources button - addResourcesButton.setVisible(true); - - addResourcesButton.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - - // remove content of the main panel - createDatasetMainPanel.clear(); - - // TabPanelException - tabPanel = new TabPanel(Tabs.ABOVE); - tabPanel.setWidth("100%"); - - // add the form - - resourceForm = new AddResourceToDataset(eventBus, createdDatasetBean.getId(), - createdDatasetBean.getTitle(), - createdDatasetBean.getSelectedOrganization(), owner, datasetUrl); - - // tab for the form - Tab formContainer = new Tab(); - formContainer.add(resourceForm); - formContainer.setHeading("Add New Resource"); - tabPanel.add(formContainer); - - // tab for the added resources - Tab addedResources = new Tab(); - addedResources.add(new AddedResourcesSummary(eventBus)); - addedResources.setHeading("Added Resource"); - tabPanel.add(addedResources); - - // add tabs to resources panel - tabPanel.selectTab(0); - - // form container - AddResourceContainer container = new AddResourceContainer(datasetUrl); - container.add(tabPanel); - - // add the new content of the main panel - createDatasetMainPanel.add(container); - } - }); - } catch (Exception e2) { - // silent - } - } + manageAddResources(createdDatasetBean, datasetUrl); } else { @@ -1425,6 +1382,110 @@ public class UpdateDatasetForm extends Composite { } } + private void manageAddResources(final DatasetBean theDatasetBean, String datasetUrl) { + + // if we are in the "general case" we need to show a form for adding resources + if (!isWorkspaceRequest) { + + try { + // show the add resources button + addResourcesButton.setVisible(true); + + final AddedResourcesSummary addedResourcesSummary = initTabManageResourcePanel(theDatasetBean, datasetUrl); + + final List resources = theDatasetBean.getCkanResources(); + GWT.log("Resources are: " + resources); + + if (resources != null + && resources.size() > 0) { + GWT.log("Executing are: " + resources); + for (ResourceElementBean reb : theDatasetBean.getCkanResources()) { + eventBus.fireEvent(new AddResourceEvent(reb)); + //addedResourcesSummary.getEventBus().fireEvent(new AddResourceEvent(reb)); + } + } + + // NB!!! addResourcesButton must be clicked once + +// Scheduler.get().scheduleDeferred(new ScheduledCommand() { +// @Override +// public void execute() { +// GWT.log("Executing are: " + resources); +// +// if (resources != null +// && resources.size() > 0) { +// +// for (ResourceElementBean reb : theDatasetBean.getCkanResources()) { +// addedResourcesSummary.getEventBus().fireEvent(new AddResourceEventProfile(reb)); +// } +// } +// } +// }); + + addResourcesButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + // remove content of the main panel + createDatasetMainPanel.clear(); + + tabPanel.selectTab(0); + + // form container + AddResourceContainer container = new AddResourceContainer(datasetUrl); + container.add(tabPanel); + + // add the new content of the main panel + createDatasetMainPanel.add(container); + + } + }); + } catch (Exception e2) { + // silent + } + + } + + } + + private AddedResourcesSummary initTabManageResourcePanel(final DatasetBean theDatasetBean, String datasetUrl) { + // TabPanelException + + if(tabPanel!=null) + tabPanel.clear(); + + tabPanel = new TabPanel(Tabs.LEFT); + tabPanel.setWidth("100%"); + + // add the form + + resourceForm = new AddResourceToDataset(eventBus, theDatasetBean.getId(), + theDatasetBean.getTitle(), theDatasetBean.getSelectedOrganization(), owner, datasetUrl); + + // tab for the form + Tab formContainer = new Tab(); + formContainer.add(resourceForm); + formContainer.setHeading("Add New Resource"); + tabPanel.add(formContainer); + + // tab for the added resources + Tab addedResources = new Tab(); + AddedResourcesSummary addedResourcesSummary = new AddedResourcesSummary(eventBus); + addedResources.add(addedResourcesSummary); + addedResources.setHeading("Added Resource"); + tabPanel.add(addedResources); + + return addedResourcesSummary; + + // add tabs to resources panel +// tabPanel.selectTab(0); + +// // form container +// AddResourceContainer container = new AddResourceContainer(datasetUrl); +// container.add(tabPanel); + } + /** * Prepare the info icons of all core metadata info. */ diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddedResourcesSummary.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddedResourcesSummary.java new file mode 100644 index 0000000..9310265 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddedResourcesSummary.java @@ -0,0 +1,161 @@ +package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanMetadataPublisher; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.AddResourceEvent; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.AddResourceEventHandler; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteResourceEvent; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteResourceEventHandler; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; + +import com.github.gwtbootstrap.client.ui.Accordion; +import com.github.gwtbootstrap.client.ui.AccordionGroup; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.Paragraph; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * A summary of the resources added by the user. + * + * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) + */ +public class AddedResourcesSummary extends Composite { + + private static AddedResourcesSummaryUiBinder uiBinder = GWT.create(AddedResourcesSummaryUiBinder.class); + + interface AddedResourcesSummaryUiBinder extends UiBinder { + } + + // Event bus + private HandlerManager eventBus; + + // list of added resources (beans) + List addedResources; + + @UiField + VerticalPanel addResourcesPanel; + + public AddedResourcesSummary(HandlerManager eventBus) { + initWidget(uiBinder.createAndBindUi(this)); + // save bus + this.eventBus = eventBus; + // bind on add resource event + bind(); + // init list + addedResources = new ArrayList(); + } + + /** + * Bind on add/delete resource event + */ + private void bind() { + + // when a new resource is added + eventBus.addHandler(AddResourceEvent.TYPE, new AddResourceEventHandler() { + + @Override + public void onAddedResource(AddResourceEvent addResourceEvent) { + GWT.log("Added resource event: " + addResourceEvent); + + // get the resource + final ResourceElementBean justAddedResource = addResourceEvent.getResource(); + + // Build an accordion to show resource info + Accordion accordion = new Accordion(); + AccordionGroup accordionGroup = new AccordionGroup(); + accordionGroup.setHeading("* " + justAddedResource.getName()); + accordion.add(accordionGroup); + + // add sub-info such as url and description + Paragraph pUrl = new Paragraph(); + pUrl.setText("URL : " + justAddedResource.getUrl()); + Paragraph pDescription = new Paragraph(); + pDescription.setText("Description : " + justAddedResource.getDescription()); + + // button to delete the resource + Button deleteButton = new Button(); + deleteButton.setText("Delete"); + deleteButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + eventBus.fireEvent(new DeleteResourceEvent(justAddedResource)); + + } + }); + + // fill accordion + accordionGroup.add(pUrl); + accordionGroup.add(pDescription); + accordionGroup.add(deleteButton); + + // add to the list + addedResources.add(justAddedResource); + + // add to the panel + addResourcesPanel.add(accordion); + } + }); + + // when the user wants to delete a resource + eventBus.addHandler(DeleteResourceEvent.TYPE, new DeleteResourceEventHandler() { + + @Override + public void onDeletedResource(DeleteResourceEvent deleteResourceEvent) { + GWT.log("onDeletedResource resource event: " + deleteResourceEvent); + + // to delete + ResourceElementBean toDelete = deleteResourceEvent.getResource(); + + // find it + for (int i = 0; i < addedResources.size(); i++) { + + if (addedResources.get(i).equals(toDelete)) { + + // get the associated widget and remove it + final Widget widget = addResourcesPanel.getWidget(i); + + // remote call to remove it from the dataset + CKanMetadataPublisher.ckanServices.deleteResourceFromDataset(toDelete, + new AsyncCallback() { + + @Override + public void onSuccess(Boolean result) { + + if (result) { + widget.removeFromParent(); + } + + // remove from the list + addedResources.remove(toDelete); + } + + @Override + public void onFailure(Throwable caught) { + + } + }); + + break; + } + } + } + }); + } + + public HandlerManager getEventBus() { + return eventBus; + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddedResourcesSummary.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddedResourcesSummary.ui.xml new file mode 100644 index 0000000..fcce11a --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddedResourcesSummary.ui.xml @@ -0,0 +1,8 @@ + + + +

Added Resources

+ +
+
\ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java index a58fbf4..7c4b500 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/CKANPublisherServicesImpl.java @@ -6,7 +6,6 @@ import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -427,7 +426,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C if (resources != null) { List list = new ArrayList(resources.size()); for (CkanResource ckanResource : resources) { - ResourceElementBean reb = toResourceBean(ckanResource); + ResourceElementBean reb = PublisherCatalogueConveter.toResourceElementBean(ckanResource); list.add(reb); } bean.setResources(list); @@ -447,22 +446,6 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C return bean; } - /** - * To resource bean. - * - * @param ckanResource the ckan resource - * @return the resource element bean - */ - public ResourceElementBean toResourceBean(CkanResource ckanResource) { - ResourceElementBean reb = new ResourceElementBean(); - reb.setName(ckanResource.getName()); - reb.setDescription(ckanResource.getDescription()); - reb.setEditableName(ckanResource.getName()); - reb.setUrl(ckanResource.getUrl()); - reb.setMimeType(ckanResource.getMimetype()); - return reb; - } - /** * Discover from the IS the vocabulary of tags for this scope, if present. * @@ -651,16 +634,25 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C // putting all reserved system fields into customFields to update customFields.putAll(ckanReserverSystemExtras); + // Settings the CKAN resources + List listCurrentResources = currentDataset.getResources(); + List resources = null; + if (listCurrentResources != null) { + resources = new ArrayList(listCurrentResources.size()); + for (CkanResource ckanResource : listCurrentResources) { + ResourceBean reb = PublisherCatalogueConveter.toResourceBean(ckanResource); + resources.add(reb); + } + } + boolean setPublic = toUpdate.getVisibility(); - // get the list of resources and convert to ResourceBean - List resources = null; + // get the list of resources and convert to ResourceBean from the Workspace ResourceElementBean resourcesToAdd = toUpdate.getResourceRoot(); - // converting to resources to be added if (resourcesToAdd != null) { Workspace workspace = getWorkspaceFromStorageHub(); - resources = WorkspaceUtils.toResources(toUpdate, workspace, userName); + resources.addAll(WorkspaceUtils.toResources(toUpdate, workspace, userName)); } logger.debug("The user wants to publish in organization with name " + organizationNameOrId); @@ -1246,6 +1238,12 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C } } + /** + * Purge system fields. + * + * @param extras the extras + * @return the map + */ public static Map> purgeSystemFields(Map> extras) { logger.info("Purging extras from reserved fields {} ", SYSTEM_CUSTOM_FIELDS_PREFIXES); if (extras == null) @@ -1265,6 +1263,12 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C } + /** + * Gets the reserverd system fields. + * + * @param extras the extras + * @return the reserverd system fields + */ public static Map> getReserverdSystemFields(Map> extras) { logger.info("Reading reserved fields from extras..."); if (extras == null) diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/PublisherCatalogueConveter.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/PublisherCatalogueConveter.java new file mode 100644 index 0000000..931ef94 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/PublisherCatalogueConveter.java @@ -0,0 +1,43 @@ +package org.gcube.portlets.widgets.ckandatapublisherwidget.server; + +import org.gcube.datacatalogue.utillibrary.shared.ResourceBean; +import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanResource; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; + +public class PublisherCatalogueConveter { + + /** + * To resource element bean. + * + * @param ckanResource the ckan resource + * @return the resource element bean + */ + public static ResourceElementBean toResourceElementBean(CkanResource ckanResource) { + ResourceElementBean reb = new ResourceElementBean(); + reb.setName(ckanResource.getName()); + reb.setDescription(ckanResource.getDescription()); + reb.setEditableName(ckanResource.getName()); + reb.setUrl(ckanResource.getUrl()); + reb.setMimeType(ckanResource.getMimetype()); + return reb; + } + + /** + * To resource bean. + * + * @param ckanResource the ckan resource + * @return the resource bean + */ + public static ResourceBean toResourceBean(CkanResource ckanResource) { + ResourceBean reb = new ResourceBean(); + reb.setName(ckanResource.getName()); + reb.setDescription(ckanResource.getDescription()); + reb.setId(ckanResource.getId()); + reb.setUrl(ckanResource.getUrl()); + reb.setMimeType(ckanResource.getMimetype()); + reb.setOwner(ckanResource.getOwner()); + reb.setDatasetId(ckanResource.getPackageId()); + return reb; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/WorkspaceUtils.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/WorkspaceUtils.java index 12a410c..4f40ab2 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/WorkspaceUtils.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/server/utils/WorkspaceUtils.java @@ -252,101 +252,6 @@ public class WorkspaceUtils { } } - -// /** -// * Returns ResourceElementBean corresponding to workspaceFolderId -// * -// * @param workspaceFolderId the workspace folder id -// * @param workspace the workspace -// * @return ResourceElementBean a tree object -// * @throws Exception the exception -// */ -// public static ResourceElementBean toResourceEBFromFolder(String workspaceFolderId, Workspace workspace) throws Exception{ -// -// ResourceElementBean rootElem = new ResourceElementBean(); -// String pathSeparator = "/"; -// -// //String pathSeparator = ws.getPathSeparator(); -// -// WorkspaceItem initialItem = workspace.getItem(workspaceFolderId); -// String fullPathBase = initialItem.getPath(); -// fullPathBase = fullPathBase.endsWith(pathSeparator) ? fullPathBase : fullPathBase + pathSeparator; -// rootElem.setFolder(initialItem.isFolder()); -// rootElem.setFullPath(initialItem.getPath().replace(fullPathBase, "")); -// rootElem.setName(initialItem.getName()); -// rootElem.setOriginalIdInWorkspace(initialItem.getId()); -// rootElem.setDescription(initialItem.getDescription()); -// extractEditableNameFromPath(rootElem, pathSeparator); -// -// // recursive visiting -//// if(initialItem.isFolder()) -//// visit(rootElem, initialItem, workspace, fullPathBase, pathSeparator); -// -// logger.debug("Tree that is going to be returned is " + rootElem); -// return rootElem; -// } - -// /** -// * Recursive visit of a workspace item. -// * -// * @param parent the parent -// * @param initialItemWS the initial item WS -// * @param workspace the ws -// * @param fullPathBase the full path base -// * @param pathSeparator the path separator -// * @throws Exception the exception -// */ -// private static void visit(ResourceElementBean parent, WorkspaceItem initialItemWS, Workspace workspace, String fullPathBase, String pathSeparator) throws Exception { -// //List children = initialItemWS.getChildren(); -// -// List children = workspace.getChildren(initialItemWS.getId()); -// -// ArrayList childrenInTree = new ArrayList(children.size()); -// for (WorkspaceItem item : children) { -// // logger.debug("Path BEFORE REPLACE is " + item.getPath()); -// // logger.debug("Path AFTER REPLACE is " + item.getPath().replace(fullPathBase, "")); -// // logger.debug("Name is " + item.getName()); -// // logger.debug("id is " + item.getId()); -// ResourceElementBean elem = new ResourceElementBean(); -// elem.setFolder(item.isFolder()); -// elem.setOriginalIdInWorkspace(item.getId()); -// elem.setFullPath(item.getPath().replace(fullPathBase, "")); -// elem.setParent(parent); -// elem.setName(item.getName()); -// elem.setDescription(item.getDescription()); -// extractEditableNameFromPath(elem, pathSeparator); -// childrenInTree.add(elem); -// logger.trace("Elem is " + elem); -// if(item.isFolder()) -// visit(elem, item, workspace, fullPathBase, pathSeparator); -// } -// // add these list as child of the rootElem -// parent.setChildren(childrenInTree); -// } - -// /** -// * Replaces the "/" char with a custom one and return an editable name for the user. -// * -// * @param rootElem the root elem -// * @param pathSeparatorInWs the path separator in ws -// */ -// public static void extractEditableNameFromPath(ResourceElementBean rootElem, String pathSeparatorInWs) { -// -// if(rootElem == null) -// return; -// -// String elemName = rootElem.getName(); -// String fullPath = rootElem.getFullPath(); -// logger.info("Element original is " + rootElem); -// -// int lastIndex = rootElem.getFullPath().lastIndexOf(elemName); -// fullPath = rootElem.getFullPath().substring(0, lastIndex); -// fullPath = fullPath.replaceAll(pathSeparatorInWs, RESOURCES_NAME_SEPARATOR) + elemName; -// rootElem.setEditableName(fullPath); -// logger.info("Editable name for resource name: "+rootElem.getName()+", is: " + rootElem.getEditableName()); -// } - - /** * Copy into the .catalogue area folder the checked resources. * There is no difference among a single-file-publish and a folder-publish. @@ -425,89 +330,4 @@ public class WorkspaceUtils { } return resources; } - -// //MOVED TO GCAT -// /** -// * Copy into the .catalogue area folder the checked resources. -// * There is no difference among a single-file-publish and a folder-publish. -// * @param folderId -// * @param userName -// * @param bean -// * @return -// */ -// public static List copyResourcesToUserCatalogueArea(String folderOrFileId, String userName, DatasetBean bean) throws Exception{ -// -// logger.debug("Request to copy onto catalogue area...."); -// List resources = new ArrayList(); -// WorkspaceItem copiedFolder = null; -// WorkspaceCatalogue userCatalogue = null; -// ResourceElementBean rootResource = bean.getResourceRoot(); -// -// // into the .catalogue area of the user's workspace -// Workspace ws = HomeLibrary -// .getHomeManagerFactory() -// .getHomeManager() -// .getHome() -// .getWorkspace(); -// -// // Retrieve the catalogue of the user -// userCatalogue = ws.getCatalogue(); -// -// // get workspace item (it could be a file or a folder) -// WorkspaceItem originalItem = ws.getItem(folderOrFileId); -// -// // copy the folder in the catalogue if it is a folder, or create a new folder -// long referenceTime = System.currentTimeMillis(); -// if(originalItem.isFolder()){ -// copiedFolder = userCatalogue.addWorkspaceItem(folderOrFileId, userCatalogue.getId()); // add to .catalogue root area -// copiedFolder.setDescription(bean.getDescription()); -// ((WorkspaceFolder)copiedFolder).rename(CatalogueUtilMethods.fromProductTitleToName(bean.getTitle()) + "_" + referenceTime); -// } -// else{ -// copiedFolder = userCatalogue.createFolder(CatalogueUtilMethods.fromProductTitleToName(bean.getTitle()) + "_" + referenceTime, bean.getDescription()); -// } -// -// // retrieve the children -// List resourcesToAdd = rootResource.getChildren(); -// -// // copy only the selected ones -// for(ResourceElementBean resource : resourcesToAdd){ -// -// if (resource.isToBeAdded()) { -// -// logger.debug("Resource to add is " + resource); -// -// // ok it is a file, so copy it into the copiedFolder -// WorkspaceItem copiedFile = userCatalogue.addWorkspaceItem(resource.getOriginalIdInWorkspace(), copiedFolder.getId()); -// -// // name and description could have been edited -// copiedFile.setDescription(resource.getDescription()); -// -// // check if it is an external url -// String externalUrl = null; -// try{ -// boolean isExternalUrl = ((FolderItem)copiedFile).getFolderItemType().equals(FolderItemType.EXTERNAL_URL); -// externalUrl = isExternalUrl ? ((ExternalUrl)copiedFile).getUrl() : null; -// }catch(Exception e){ -// logger.warn("Unable to check if it is an external url file ", e); -// } -// -// resources.add(new ResourceBean( -// externalUrl != null ? externalUrl : copiedFile.getPublicLink(true), -// resource.getEditableName(), -// copiedFile.getDescription(), -// copiedFile.getId(), -// userName, -// null, // dataset id, to be set -// ((FolderItem)copiedFile).getMimeType())); -// -// // postpone rename operation -// copiedFile.rename(resource.getEditableName()); -// } -// -// } -// return resources; -// } - - } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java index dc45bbd..60ef6d7 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceElementBean.java @@ -162,6 +162,10 @@ public class ResourceElementBean implements Comparable, Ser this.description = description; this.organizationNameDatasetParent = organizationNameDatasetParent; } + + public int getBeanID(){ + return identifierGWT; + } /** * Gets the parent.