From f7da157540dabc701f5d1d351fc2ff6d6309c609 Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Wed, 7 Dec 2016 09:58:11 +0000 Subject: [PATCH] duplicated custom fields (i.e., with same keys) are now supported git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/widgets/ckan-metadata-publisher-widget@139745 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/ui/CreateDatasetForm.java | 51 ++++++++++++++----- .../server/CKANPublisherServicesImpl.java | 8 +-- .../server/utils/WorkspaceUtils.java | 18 ++++++- .../shared/DatasetMetadataBean.java | 8 +-- 4 files changed, 62 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java index 71adb23..5dfa995 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java @@ -299,25 +299,28 @@ public class CreateDatasetForm extends Composite{ maintainerEmailTextbox.setText(bean.getMaintainerEmail()); // retrieve custom fields - Map customFieldsMap = bean.getCustomFields(); + Map> customFieldsMap = bean.getCustomFields(); if(customFieldsMap != null){ // get the keys and put them as tags - Iterator> iteratorOverCustomField = customFieldsMap.entrySet().iterator(); + Iterator>> iteratorOverCustomField = customFieldsMap.entrySet().iterator(); while (iteratorOverCustomField.hasNext()) { - Map.Entry entry = (Map.Entry) iteratorOverCustomField + Map.Entry> entry = (Map.Entry>) iteratorOverCustomField .next(); - // these are fixed key, variable value custom fields - CustomFieldEntry toAdd = new CustomFieldEntry(eventBus, entry.getKey(), entry.getValue(), false); - customFieldEntriesList.add(toAdd); - customFields.add(toAdd); + List values = entry.getValue(); - // add as tag - tagsPanel.addTagElement(entry.getKey()); + for (String value : values) { + // these are fixed key, variable value custom fields + CustomFieldEntry toAdd = new CustomFieldEntry(eventBus, entry.getKey(), value, false); + customFieldEntriesList.add(toAdd); + customFields.add(toAdd); + // add as tag + tagsPanel.addTagElement(entry.getKey()); + } } } @@ -829,15 +832,25 @@ public class CreateDatasetForm extends Composite{ if(resourcesTwinPanel != null) receivedBean.setResources(resourcesTwinPanel.getResourcesToPublish()); - Map customFieldsMap = new HashMap(); + Map> customFieldsMap = new HashMap>(); // prepare custom fields for (MetaDataFieldSkeleton field : listOfMetadataFields) { String value = field.getFieldCurrentValue(); - if(!value.isEmpty()) - customFieldsMap.put(field.getFieldName(), field.getFieldCurrentValue()); + if(!value.isEmpty()){ + String key = field.getFieldName(); + List valuesForThisField = null; + if(customFieldsMap.containsKey(key)) + valuesForThisField = customFieldsMap.get(key); + else + valuesForThisField = new ArrayList(); + + valuesForThisField.add(value); + + customFieldsMap.put(key, valuesForThisField); + } } @@ -845,8 +858,18 @@ public class CreateDatasetForm extends Composite{ String key = customEntry.getKey(); String value = customEntry.getValue(); - if(value != null && !value.isEmpty()) - customFieldsMap.put(key, value); + + if(value != null && !value.isEmpty()){ + List valuesForThisField = null; + if(customFieldsMap.containsKey(key)) + valuesForThisField = customFieldsMap.get(key); + else + valuesForThisField = new ArrayList(); + + valuesForThisField.add(value); + + customFieldsMap.put(key, valuesForThisField); + } } 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 9b9f92f..7ebd0c1 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 @@ -250,7 +250,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C String chosenLicense = toCreate.getLicense(); String licenseId = findLicenseIdByLicense(chosenLicense); List listOfTags = toCreate.getTags(); - Map customFields = toCreate.getCustomFields(); + Map> customFields = toCreate.getCustomFields(); boolean setPublic = toCreate.getVisibility(); // get the list of resources and convert to ResourceBean @@ -267,9 +267,9 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C DataCatalogue utils = getCatalogue(scope); String userApiKey = utils.getApiKeyFromUsername(userName); - String datasetId = utils.createCKanDataset(userApiKey, title, null, organizationNameOrId, author, - authorMail, maintainer, maintainerMail, version, description, licenseId, - listOfTags, customFields, resources, setPublic); + String datasetId = utils.createCKanDatasetMultipleCustomFields + (userApiKey, title, null, organizationNameOrId, author, authorMail, maintainer, + maintainerMail, version, description, licenseId, listOfTags, customFields, resources, setPublic); if(datasetId != null){ 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 bad7378..20e2c1b 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 @@ -2,8 +2,11 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.server.utils; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.gcube.common.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; @@ -114,7 +117,20 @@ public class WorkspaceUtils { // Create the folder in the catalogue Map folderItems = Utils.getGcubeItemProperties(originalFolder); - bean.setCustomFields(folderItems); + + if(folderItems != null){ + // transform this properties + Map> tempItems = new HashMap>(folderItems.size()); + + Iterator> iterator = folderItems.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = (Map.Entry) iterator + .next(); + tempItems.put(entry.getKey(), Arrays.asList(entry.getValue())); + } + + bean.setCustomFields(tempItems); + } // set them into the bean bean.setResources(Arrays.asList(WorkspaceUtils.getTreeFromFolder(folderId, ws))); diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/DatasetMetadataBean.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/DatasetMetadataBean.java index 74ce110..10307af 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/DatasetMetadataBean.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/DatasetMetadataBean.java @@ -47,7 +47,7 @@ public class DatasetMetadataBean implements Serializable { private List resources; // in case of workspace, this is the list of children of the folder private List metadataList; private List tags; // on retrieve, they are the keys of the custom fields - private Map customFields; + private Map> customFields; private List groups; public DatasetMetadataBean(){ @@ -76,7 +76,7 @@ public class DatasetMetadataBean implements Serializable { * @param metadataList */ public DatasetMetadataBean(String id, String title, String description, - Map customFields, List tags, + Map> customFields, List tags, String license, boolean visibility, String source, long version, String authorName, String authorSurname, String authorEmail, String maintainer, String maintainerEmail, String ownerIdentifier, @@ -146,11 +146,11 @@ public class DatasetMetadataBean implements Serializable { this.description = description; } - public Map getCustomFields() { + public Map> getCustomFields() { return customFields; } - public void setCustomFields(Map customFields) { + public void setCustomFields(Map> customFields) { this.customFields = customFields; }