From b80ffda6134d0d536f3e2ffdfe957882b7874e3a Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Wed, 6 Jul 2016 16:41:43 +0000 Subject: [PATCH] Resource managing is almost finished, the editable description must be made working git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/widgets/ckan-metadata-publisher-widget@130042 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 1 + .../client/CKanMetadataPublisher.java | 4 +- .../client/ui/AddResourceContainer.java | 1 - .../client/ui/AddResourceToDataset.java | 17 +- .../client/ui/CreateDatasetForm.java | 127 ++++++--- .../client/ui/CreateDatasetForm.ui.xml | 63 +++-- .../client/ui/ResourcesTable.java | 248 ++++++++++++++++++ .../server/CKANPublisherServicesImpl.java | 111 ++++---- .../shared/DatasetMetadataBean.java | 27 +- .../shared/ResourceBeanWrapper.java | 75 ++++-- 10 files changed, 534 insertions(+), 140 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/ResourcesTable.java diff --git a/.classpath b/.classpath index 57c104b..3e9559a 100644 --- a/.classpath +++ b/.classpath @@ -20,6 +20,7 @@ + diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java index 5bfbc0f..a26d737 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanMetadataPublisher.java @@ -16,7 +16,7 @@ public class CKanMetadataPublisher implements EntryPoint { public void onModuleLoad() { // remove comment to the below line for testing the widget - //startExample(); + startExample(); } @@ -25,7 +25,7 @@ public class CKanMetadataPublisher implements EntryPoint { String idFolderWorkspace = "d3a37eb9-1589-4c95-a9d0-c473a02d4f0f"; String owner = "costantino.perciante"; - RootPanel.get("ckan-metadata-publisher-div").add(new CreateDatasetForm(owner)); + RootPanel.get("ckan-metadata-publisher-div").add(new CreateDatasetForm(idFolderWorkspace ,owner)); } } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceContainer.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceContainer.java index afe9744..8ed70a4 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceContainer.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceContainer.java @@ -34,5 +34,4 @@ public class AddResourceContainer extends Composite{ public void add(TabPanel w){ resourcesPanel.add(w); } - } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceToDataset.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceToDataset.java index ef8bde5..0e70338 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceToDataset.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddResourceToDataset.java @@ -71,13 +71,6 @@ public class AddResourceToDataset extends Composite{ @Override public void onClick(ClickEvent event) { - // String currentPath = Window.Location.getHref(); - // int datasetIndex = datasetUrl.indexOf("/dataset"); - // if(datasetIndex == -1) - // return; - // - // String finalPart = datasetUrl.substring(datasetIndex); - // String finalPath = currentPath + "?" + "path" + "=" + finalPart; Window.Location.assign(datasetUrl); } }); @@ -97,7 +90,15 @@ public class AddResourceToDataset extends Composite{ } // collect data and build up the bean - final ResourceBeanWrapper resource = new ResourceBeanWrapper(resourceUrlTextBox.getText(), resourceNameTextBox.getText(), resourceDescriptionTextArea.getText()); + final ResourceBeanWrapper resource = + new ResourceBeanWrapper( + resourceUrlTextBox.getText(), + resourceNameTextBox.getText(), + resourceDescriptionTextArea.getText(), + null, + true, + null, + owner); // disable add button addResourceButton.setEnabled(false); 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 6b5e94a..ea863ca 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 @@ -34,6 +34,7 @@ import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.github.gwtbootstrap.client.ui.constants.ButtonType; import com.github.gwtbootstrap.client.ui.resources.Bootstrap.Tabs; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Display; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; @@ -50,6 +51,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; @@ -86,8 +88,6 @@ public class CreateDatasetForm extends Composite{ @UiField TextBox maintainerEmailTextbox; @UiField ControlGroup customFields; @UiField Button addCustomFieldButton; - @UiField CheckBox addResourcesCheckBox; - @UiField ControlGroup resourcesControlGroup; @UiField Button createButton; @UiField Button resetButton; @UiField AlertBlock infoBlock; @@ -97,11 +97,17 @@ public class CreateDatasetForm extends Composite{ @UiField ListBox metadataProfilesFormatListbox; @UiField Form formFirstStep; @UiField Form formSecondStep; + @UiField Form formThirdStep; @UiField Button continueButton; - @UiField Button goBackButton; + @UiField Button goBackButtonFirstOrSecondStep; @UiField Paragraph selectedProfile; @UiField Button goToDatasetButton; @UiField Button addResourcesButton; + @UiField CheckBox addResourcesCheckBox; + @UiField ControlGroup resourcesControlGroup; + @UiField SimplePanel workspaceResourcesContainer; + @UiField Button continueThirdStep; + @UiField Button goBackButtonFirstStep; // tab panel private TabPanel tabPanel; @@ -133,6 +139,9 @@ public class CreateDatasetForm extends Composite{ // the list of MetaDataFieldSkeleton added List listOfMetadataFields = new ArrayList(); + // resource table + private ResourcesTable resourcesTable; + /** * Invoked in the most general case * @param owner @@ -235,9 +244,6 @@ public class CreateDatasetForm extends Composite{ } }); - // hide the Add resources checkbox - resourcesControlGroup.removeFromParent(); - } /** @@ -263,14 +269,11 @@ public class CreateDatasetForm extends Composite{ continueButton.setEnabled(false); resetButton.setEnabled(false); - // set to visible the checkbox to add resources of the workspace - resourcesControlGroup.setVisible(true); - // get back the licenses and the metadata information from the workspace ckanServices.getDatasetBean(idFolderWorkspace, owner, new AsyncCallback() { @Override - public void onSuccess(DatasetMetadataBean bean) { + public void onSuccess(final DatasetMetadataBean bean) { if(bean != null){ @@ -319,6 +322,11 @@ public class CreateDatasetForm extends Composite{ } } + // enable manage resources checkbox + resourcesControlGroup.setVisible(true); + addResourcesCheckBox.getElement().getStyle().setDisplay(Display.INLINE_BLOCK); + resourcesTable = new ResourcesTable(bean.getResources()); + // try to retrieve the licenses setAlertBlock("Retrieving licenses, please wait...", AlertType.INFO, true); ckanServices.getLicenses(new AsyncCallback() { @@ -342,8 +350,7 @@ public class CreateDatasetForm extends Composite{ licenseListbox.setItemSelected(i, true); } - - + // everything went ok setAlertBlock("", AlertType.ERROR, false); continueButton.setEnabled(true); @@ -471,24 +478,77 @@ public class CreateDatasetForm extends Composite{ String errorMsg = validateDataOnContinue(); if(errorMsg == null){ - formFirstStep.setVisible(false); - formSecondStep.setVisible(true); - selectedProfile.setText("Selected Profile is " + metadataProfilesFormatListbox.getSelectedItemText()); + + // check what to do + if(isWorkspaceRequest){ + if(!addResourcesCheckBox.getValue()){ + + // we need to show the page to handle resources one by one from the workspace + formFirstStep.setVisible(false); + formSecondStep.setVisible(true); + formThirdStep.setVisible(false); + + // add the resources to the container panel + if(workspaceResourcesContainer.getWidget() == null) + workspaceResourcesContainer.add(resourcesTable); + + }else{ + + // resources will be added automatically and we can show the page of the profiles + formFirstStep.setVisible(false); + formThirdStep.setVisible(true); + selectedProfile.setText("Selected Profile is " + metadataProfilesFormatListbox.getSelectedItemText()); + } + }else{ + + // this is not a workspace request + formFirstStep.setVisible(false); + formThirdStep.setVisible(true); + selectedProfile.setText("Selected Profile is " + metadataProfilesFormatListbox.getSelectedItemText()); + } }else{ alertOnContinue("Please check inserted data [" + errorMsg + "]", AlertType.ERROR); } } - @UiHandler("goBackButton") - void onGoBackButton(ClickEvent e){ + + @UiHandler("goBackButtonFirstStep") + void onGoBackButtonFirstStep(ClickEvent e){ // swap forms formFirstStep.setVisible(true); formSecondStep.setVisible(false); + formThirdStep.setVisible(false); } + + @UiHandler("goBackButtonFirstOrSecondStep") + void onGoBackButton(ClickEvent e){ + + // swap forms + if(isWorkspaceRequest && !addResourcesCheckBox.getValue()){ + formFirstStep.setVisible(false); + formSecondStep.setVisible(true); + }else{ + formFirstStep.setVisible(true); + formSecondStep.setVisible(false); + } + formThirdStep.setVisible(false); + + } + + @UiHandler("continueThirdStep") + void onContinueThirdStep(ClickEvent e){ + + // swap forms + formSecondStep.setVisible(false); + formThirdStep.setVisible(true); + + } + + @UiHandler("createButton") void createDatasetEvent(ClickEvent e){ @@ -506,7 +566,6 @@ public class CreateDatasetForm extends Composite{ String maintainer = maintainerTextbox.getValue(); String maintainerEmail = maintainerEmailTextbox.getValue(); String chosenOrganization = organizationsListbox.getSelectedItemText(); - boolean addResources = addResourcesCheckBox.getValue(); // fill the bean receivedBean.setAuthor(author); @@ -520,7 +579,6 @@ public class CreateDatasetForm extends Composite{ receivedBean.setTitle(title); receivedBean.setTags(tagsList); receivedBean.setSelectedOrganization(chosenOrganization); - receivedBean.setAddResources(addResources); Map customFieldsMap = new HashMap(); @@ -546,7 +604,7 @@ public class CreateDatasetForm extends Composite{ // invoke the create method createButton.setEnabled(false); - goBackButton.setEnabled(false); + goBackButtonFirstOrSecondStep.setEnabled(false); ckanServices.createCKanDataset(receivedBean, isWorkspaceRequest, new AsyncCallback() { @@ -570,14 +628,6 @@ public class CreateDatasetForm extends Composite{ @Override public void onClick(ClickEvent event) { - - // String currentPath = Window.Location.getHref(); - // int datasetIndex = datasetUrl.indexOf("/dataset"); - // if(datasetIndex == -1) - // return; - // - // String finalPart = datasetUrl.substring(datasetIndex); - // String finalPath = currentPath + "?" + "path" + "=" + finalPart; Window.Location.assign(datasetUrl); } }); @@ -715,7 +765,7 @@ public class CreateDatasetForm extends Composite{ onCreateAlertBlock.setType(type); onCreateAlertBlock.setVisible(true); createButton.setEnabled(true); - goBackButton.setEnabled(true); + goBackButtonFirstOrSecondStep.setEnabled(true); // hide after some seconds Timer t = new Timer() { @@ -834,6 +884,7 @@ public class CreateDatasetForm extends Composite{ licenseListbox.setEnabled(false); organizationsListbox.setEnabled(false); addCustomFieldButton.setEnabled(false); + addResourcesCheckBox.setEnabled(false); // freeze tags for(int i = 0; i < tagsList.size(); i++){ @@ -852,7 +903,10 @@ public class CreateDatasetForm extends Composite{ field.freeze(); } - + + // freeze table of resources + if(resourcesTable != null) + resourcesTable.freezeTable(); } /** @@ -881,6 +935,19 @@ public class CreateDatasetForm extends Composite{ } } + @UiHandler("addResourcesCheckBox") + void onAddResourcesCheckboxPress(ClickEvent e){ + + // we need to set all resources to be added if checkbox value is true + if(addResourcesCheckBox.getValue()){ + + GWT.log("Set all resources to be add"); + resourcesTable.checkAllResources(true); + + } + + } + /** * Add the tag as an element */ diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml index 93a9c2f..ebec215 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.ui.xml @@ -84,9 +84,8 @@ Tags: - + Tags are meaningful information that can be associated to the @@ -207,6 +206,26 @@ + + + Product + Resources: + + + Add folder content as resources + + + + Automatically add folder content as resources of the product + + + + @@ -219,8 +238,28 @@ + + + + Manage Resources + + + + Continue + + Go + Back + + + + + @@ -258,21 +297,6 @@ - - - - Add folder content as resources - - - - Automatically add folder content as resources of the product - - - - @@ -283,7 +307,8 @@ Create - Go + + Go Back dataProvider = new ListDataProvider(); + + // the table that will be displayed + private CellTable table = new CellTable(); + + // save original list + private List originalResources; + + // main panel + private VerticalPanel mainPanel = new VerticalPanel(); + + // button labels + private static final String SELECT_ALL_LABEL = "Select All"; + private static final String DESELECT_ALL_LABEL = "Deselect All"; + + // maintain the selection status + private boolean selectedAll = true; + final Button selectAllButton = new Button(DESELECT_ALL_LABEL); + + // is read only? + private boolean readOnly = false; + + public ResourcesTable(List resources){ + + super(); + initWidget(mainPanel); + + // set panel width + mainPanel.setWidth("100%"); + + // save original resources + this.originalResources = resources; + + // add data to the provider + dataProvider.setList(resources); + dataProvider.addDataDisplay(table); + + // style of the table + table.setStriped(true); + table.setWidth("100%", false); + table.addStyleName("table-style"); + table.setBordered(true); + + // visible rows + table.setVisibleRange(new Range(0, originalResources.size())); + table.setRowCount(originalResources.size(), true); + + // Add a checked column to add the resource. + Column chosenColumn = new Column(new CheckboxCell(true,false)) { + + @Override + public Boolean getValue(ResourceBeanWrapper object) { + return object.isToBeAdded(); + } + + @Override + public void onBrowserEvent(Context context, final Element parent, final ResourceBeanWrapper res, NativeEvent event) { + event.preventDefault(); + res.setToBeAdded(!res.isToBeAdded()); + } + + @Override + public void render(Context context, ResourceBeanWrapper object, + SafeHtmlBuilder sb) { + + if(readOnly){ + + String checked = object.isToBeAdded() ? "checked" : "unchecked"; + sb.appendHtmlConstant(""); + + }else{ + + super.render(context, object, sb); + + } + + } + }; + table.addColumn(chosenColumn, "Select"); + + // Add a text column to show the name (and make it sortable) TODO : make it editable + Column nameColumn = new Column(new EditTextCell()) { + + @Override + public String getValue(ResourceBeanWrapper object) { + return object.getName(); + } + + @Override + public void onBrowserEvent(Context context, Element elem, + ResourceBeanWrapper object, NativeEvent event) { + // TODO Auto-generated method stub + //super.onBrowserEvent(context, elem, object, event); + } + + }; + + ListHandler nameColHandler = new ListHandler(dataProvider.getList()); + + nameColHandler.setComparator(nameColumn, new Comparator() { + + public int compare(ResourceBeanWrapper o1, ResourceBeanWrapper o2) { + + return o1.getName().compareTo(o2.getName()); + + } + }); + nameColumn.setSortable(true); + nameColumn.setDefaultSortAscending(false); + table.addColumnSortHandler(nameColHandler); + table.addColumn(nameColumn, "Name"); + + // Add a date column to show the url + TextColumn urlColumn = new TextColumn() { + @Override + public String getValue(ResourceBeanWrapper object) { + return object.getUrl(); + } + }; + table.addColumn(urlColumn, "Url"); + + // Add a date column to show the description (and make it sortable) + Column descColumn = new Column(new EditTextCell()) { + @Override + public String getValue(ResourceBeanWrapper object) { + return object.getDescription(); + } + + @Override + public void onBrowserEvent(Context context, Element elem, + ResourceBeanWrapper object, NativeEvent event) { + event.preventDefault(); + + if(!readOnly){ + super.onBrowserEvent(context, elem, object, event); + + GWT.log("Element is " + elem); + + } + } + + @Override + public void render(Context context, ResourceBeanWrapper object, + SafeHtmlBuilder sb) { + // TODO Auto-generated method stub + super.render(context, object, sb); + GWT.log("Element is " + sb); + } + }; + + table.addColumn(descColumn, "Description (Editable)"); + + // sort by columnName + table.getColumnSortList().push(nameColumn); + + // set width column chosen + table.setColumnWidth(chosenColumn, 5, Unit.PCT); + table.setColumnWidth(nameColumn, 20, Unit.PCT); + table.setColumnWidth(urlColumn, 45, Unit.PCT); + table.setColumnWidth(descColumn, 30, Unit.PCT); + + // add a select all button + + selectAllButton.getElement().getStyle().setMarginTop(15, Unit.PX); + selectAllButton.getElement().getStyle().setMarginBottom(15, Unit.PX); + + // add handler + selectAllButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + selectedAll = !selectedAll; + checkAllResources(selectedAll); + } + }); + + // add the button + mainPanel.add(selectAllButton); + + // add the table + mainPanel.add(table); + } + + /** + * Check all resources + */ + public void checkAllResources(boolean value){ + + if(value) + selectAllButton.setText(DESELECT_ALL_LABEL); + else + selectAllButton.setText(SELECT_ALL_LABEL); + + for(ResourceBeanWrapper resource: originalResources) + resource.setToBeAdded(value); + + // refresh data + dataProvider.refresh(); + } + + /** + * Freeze table content and select/deselect all button + */ + public void freezeTable() { + + selectAllButton.setEnabled(false); + readOnly = true; + + // redraw the table + table.redraw(); + } +} 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 050b3a8..afe92bc 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 @@ -56,7 +56,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C public static final String TEST_SCOPE = "/gcube/devsec/devVRE"; public static final String TEST_USER = "test.user"; - private final static String TEST_SEC_TOKEN = "4620e6d0-2313-4f48-9d54-eb3efd01a810"; + private final static String TEST_SEC_TOKEN = "a1e19695-467f-42b8-966d-bf83dd2382ef"; // ckan keys for ASL private static final String CKAN_TOKEN_KEY = "ckanToken"; @@ -103,7 +103,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C */ public String getDevelopmentUser() { String user = TEST_USER; - //user = "costantino.perciante"; + user = "costantino.perciante"; return user; } @@ -348,12 +348,12 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C logger.info("DatasetBean request for " + folderId + " and " + owner); + ASLSession aslSession = getASLSession(); + String user = aslSession.getUsername(); + if(isWithinPortal()){ try{ - ASLSession aslSession = getASLSession(); - String user = aslSession.getUsername(); - // check if session expired if(user.equals(TEST_USER)){ logger.debug("SESSION EXPIRED"); @@ -390,7 +390,8 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C WorkspaceItem retrievedItem = ws.getItem(folderId); // set some info - bean.setTitle(retrievedItem.getName()); + String onlyAlphanumeric = retrievedItem.getName().replaceAll("[^A-Za-z0-9]", ""); + bean.setTitle(onlyAlphanumeric); bean.setDescription(retrievedItem.getDescription()); // retrieve gcube items of the folder @@ -405,8 +406,8 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C childrenIds.add(file.getId()); } - bean.setResourcesIds(childrenIds); - + List listOfResources = getWorkspaceResourcesInformation(childrenIds, ws, user); + bean.setResources(listOfResources); } // retrieve the metadata @@ -424,7 +425,8 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C bean.setId(folderId); bean.setDescription("This is a fantastic description"); bean.setVersion(1); - bean.setTitle("dataset-" + Calendar.getInstance().getTimeInMillis()); + String onlyAlphanumeric = "test-creation-blablabla".replaceAll("[^A-Za-z0-9]", ""); + bean.setTitle(onlyAlphanumeric + Calendar.getInstance().getTimeInMillis()); bean.setAuthor("Costantino Perciante"); bean.setAuthorEmail("costantino.perciante@isti.cnr.it"); bean.setMaintainer("Costantino Perciante"); @@ -452,8 +454,8 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C if(!file.isFolder()) // ok, it's a file childrenIds.add(file.getId()); } - - bean.setResourcesIds(childrenIds); + List listOfResources = getWorkspaceResourcesInformation(childrenIds, ws, user); + bean.setResources(listOfResources); } // retrieve the metadata @@ -511,14 +513,6 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C return null; } - // get the owner - String username = toCreate.getOwnerIdentifier(); - - // set dataset info (same id as the folder, if the request comes from the workspace) - String withId = null; - if(isWorkspaceRequest) - withId = toCreate.getId(); - String title = toCreate.getTitle(); String organizationNameOrId = toCreate.getSelectedOrganization(); String author = toCreate.getAuthor(); @@ -532,41 +526,29 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C List listOfTags = toCreate.getTags(); Map customFields = toCreate.getCustomFields(); boolean setPublic = toCreate.getVisibility(); + + // get the list of resources and convert to ResourceBean List resources = new ArrayList(); + List resourcesToAdd = toCreate.getResources(); - // build the resource (if it is a workspaceRequest type) - if(toCreate.isAddResources() && isWorkspaceRequest){ + if(resourcesToAdd != null && !resourcesToAdd.isEmpty()) + for (ResourceBeanWrapper resourceBeanWrapper : resourcesToAdd) { - logger.debug("We need to add resources to the dataset"); - - try{ - - Workspace ws = HomeLibrary - .getHomeManagerFactory() - .getHomeManager() - .getHome(toCreate.getOwnerIdentifier()).getWorkspace(); - - for(String resourceId: toCreate.getResourcesIds()){ - - FolderItem item = (FolderItem)ws.getItem(resourceId); - ResourceBean newResource = new ResourceBean(); - newResource.setDescription(item.getDescription()); - newResource.setId(item.getId()); - newResource.setUrl(item.getPublicLink(false)); - newResource.setName(item.getName()); - newResource.setMimeType(item.getMimeType()); - newResource.setOwner(username); - resources.add(newResource); + if(resourceBeanWrapper.isToBeAdded()){ + resources.add(new ResourceBean( + resourceBeanWrapper.getUrl(), + resourceBeanWrapper.getName(), + resourceBeanWrapper.getDescription(), + resourceBeanWrapper.getId(), + resourceBeanWrapper.getOwner(), + null, + resourceBeanWrapper.getMimeType())); } - }catch(Exception e){ - logger.error("Unable to add those resources to the dataset", e); } - } - - String datasetId = utils.createCKanDataset(getUserCKanTokenFromSession(), withId, title, organizationNameOrId, author, + String datasetId = utils.createCKanDataset(getUserCKanTokenFromSession(), null, title, organizationNameOrId, author, authorMail, maintainer, maintainerMail, version, description, licenseId, listOfTags, customFields, resources, setPublic); @@ -688,4 +670,41 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C private String concatenateSessionKeyScope(String key, String scope){ return key.concat(scope); } + + /** + * Build up the resource beans. + * @param resourceIds + * @param ws + * @param username + * @return + */ + public List getWorkspaceResourcesInformation( + List resourceIds, Workspace ws, String username) { + + List toReturn = null; + + try{ + + toReturn = new ArrayList<>(); + + for (String resourceId : resourceIds) { + + ResourceBeanWrapper newResource = new ResourceBeanWrapper(); + FolderItem item = (FolderItem)ws.getItem(resourceId); + newResource.setDescription(item.getDescription()); + newResource.setId(item.getId()); + newResource.setUrl(item.getPublicLink(true)); + newResource.setName(item.getName()); + newResource.setToBeAdded(true); // default is true + newResource.setMimeType(item.getMimeType()); + newResource.setOwner(username); + toReturn.add(newResource); + + } + }catch(Exception e){ + logger.error("Unable to retrieve resources' info", e); + } + + return toReturn; + } } \ No newline at end of file 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 380ca84..2ea95d7 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 @@ -43,8 +43,7 @@ public class DatasetMetadataBean implements Serializable { private String ownerIdentifier; // owner of the folder into the workspace (e.g., andrea.rossi) private List organizationList; // list of organization in which the user is present and could create the dataset private String selectedOrganization; - private List resourcesIds; // in case of workspace, this is the list of children's ids - private boolean addResources; // if true, add these files as resources to the dataset + private List resources; // in case of workspace, this is the list of children private List metadataList; public DatasetMetadataBean(){ @@ -78,7 +77,7 @@ public class DatasetMetadataBean implements Serializable { String author, String authorEmail, String maintainer, String maintainerEmail, String ownerIdentifier, List organizationList, String selectedOrganization, - List resourcesIds, boolean addResources, + List resources, List metadataList) { super(); this.id = id; @@ -97,8 +96,7 @@ public class DatasetMetadataBean implements Serializable { this.ownerIdentifier = ownerIdentifier; this.organizationList = organizationList; this.selectedOrganization = selectedOrganization; - this.resourcesIds = resourcesIds; - this.addResources = addResources; + this.resources = resources; this.metadataList = metadataList; } @@ -238,20 +236,12 @@ public class DatasetMetadataBean implements Serializable { this.selectedOrganization = selectedOrganization; } - public List getResourcesIds() { - return resourcesIds; + public List getResources() { + return resources; } - public void setResourcesIds(List resourcesIds) { - this.resourcesIds = resourcesIds; - } - - public boolean isAddResources() { - return addResources; - } - - public void setAddResources(boolean addResources) { - this.addResources = addResources; + public void setResources(List resources) { + this.resources = resources; } @Override @@ -265,8 +255,7 @@ public class DatasetMetadataBean implements Serializable { + ", maintainerEmail=" + maintainerEmail + ", ownerIdentifier=" + ownerIdentifier + ", organizationList=" + organizationList + ", selectedOrganization=" + selectedOrganization - + ", resourcesIds=" + resourcesIds + ", addResources=" - + addResources + ", metadataList=" + metadataList + "]"; + + ", resources=" + resources + ", metadataList=" + metadataList + "]"; } } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBeanWrapper.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBeanWrapper.java index a96f70f..a9f8b13 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBeanWrapper.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBeanWrapper.java @@ -13,35 +13,33 @@ public class ResourceBeanWrapper implements Serializable{ private String name; private String description; private String id; + private boolean toBeAdded; + private String mimeType; + private String owner; public ResourceBeanWrapper(){ super(); } - /** - * @param url - * @param name - * @param description - */ - public ResourceBeanWrapper(String url, String name, String description) { - super(); - this.url = url; - this.name = name; - this.description = description; - } - /** * @param url * @param name * @param description * @param id + * @param toBeAdded + * @param mimeType + * @param owner */ - public ResourceBeanWrapper(String url, String name, String description, String id) { + public ResourceBeanWrapper(String url, String name, String description, + String id, boolean toBeAdded, String mimeType, String owner) { super(); this.url = url; this.name = name; this.description = description; this.id = id; + this.toBeAdded = toBeAdded; + this.mimeType = mimeType; + this.owner = owner; } /** @@ -100,9 +98,56 @@ public class ResourceBeanWrapper implements Serializable{ this.id = id; } + /** + * @return the toBeAdded + */ + public boolean isToBeAdded() { + return toBeAdded; + } + + /** + * @param toBeAdded the toBeAdded to set + */ + public void setToBeAdded(boolean toBeAdded) { + this.toBeAdded = toBeAdded; + } + + /** + * @return the mimeType + */ + public String getMimeType() { + return mimeType; + } + + /** + * @param mimeType the mimeType to set + */ + public void setMimeType(String mimeType) { + this.mimeType = mimeType; + } + + /** + * @return the owner + */ + public String getOwner() { + return owner; + } + + /** + * @param owner the owner to set + */ + public void setOwner(String owner) { + this.owner = owner; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ @Override public String toString() { - return "ResourceBean [url=" + url + ", name=" + name + ", description=" - + description + ", id=" + id + "]"; + return "ResourceBeanWrapper [url=" + url + ", name=" + name + + ", description=" + description + ", id=" + id + + ", toBeAdded=" + toBeAdded + ", mimeType=" + mimeType + + ", owner=" + owner + "]"; } }