diff --git a/pom.xml b/pom.xml index e2c324a..9a3a318 100644 --- a/pom.xml +++ b/pom.xml @@ -170,12 +170,6 @@ gcube-widgets compile - - net.htmlparser.jericho - jericho-html - 3.3 - compile - diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java index 9f8f597..64d40c1 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherService.java @@ -2,7 +2,7 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.DatasetMetadataBean; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.LicensesBean; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBeanWrapper; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @@ -43,7 +43,7 @@ public interface CKanPublisherService extends RemoteService { * @param datasetId * @param owner of the dataset */ - ResourceBean addResourceToDataset(ResourceBean resource, String datasetId, String owner); + ResourceBeanWrapper addResourceToDataset(ResourceBeanWrapper resource, String datasetId, String owner); /** * Delete this resource from the dataset with id datasetId @@ -52,6 +52,6 @@ public interface CKanPublisherService extends RemoteService { * @param owner of the dataset * @return true on success, false otherwise */ - boolean deleteResourceFromDataset(ResourceBean resource, String owner); + boolean deleteResourceFromDataset(ResourceBeanWrapper resource, String owner); } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java index a13ee27..8314fcf 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/CKanPublisherServiceAsync.java @@ -2,7 +2,7 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.DatasetMetadataBean; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.LicensesBean; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBeanWrapper; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -44,8 +44,8 @@ public interface CKanPublisherServiceAsync { * @param owner of the dataset * @param callback */ - void addResourceToDataset(ResourceBean resource, String datasetId, String owner, - AsyncCallback callback); + void addResourceToDataset(ResourceBeanWrapper resource, String datasetId, String owner, + AsyncCallback callback); /** * Delete this resource from the dataset with id datasetId @@ -53,7 +53,7 @@ public interface CKanPublisherServiceAsync { * @param owner of the dataset * @return true on success, false otherwise */ - void deleteResourceFromDataset(ResourceBean resource, + void deleteResourceFromDataset(ResourceBeanWrapper resource, String owner, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/AddResourceEvent.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/AddResourceEvent.java index 05a5f4f..4bfa9f3 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/AddResourceEvent.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/AddResourceEvent.java @@ -1,6 +1,6 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.events; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBeanWrapper; import com.google.gwt.event.shared.GwtEvent; @@ -11,13 +11,13 @@ import com.google.gwt.event.shared.GwtEvent; public class AddResourceEvent extends GwtEvent { public static Type TYPE = new Type(); - private ResourceBean resource; + private ResourceBeanWrapper resource; - public AddResourceEvent(ResourceBean resource) { + public AddResourceEvent(ResourceBeanWrapper resource) { this.resource = resource; } - public ResourceBean getResource() { + public ResourceBeanWrapper getResource() { return resource; } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteResourceEvent.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteResourceEvent.java index 63178a5..0621a40 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteResourceEvent.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/DeleteResourceEvent.java @@ -1,6 +1,6 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.events; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBeanWrapper; import com.google.gwt.event.shared.GwtEvent; @@ -11,13 +11,13 @@ import com.google.gwt.event.shared.GwtEvent; public class DeleteResourceEvent extends GwtEvent { public static Type TYPE = new Type(); - private ResourceBean resource; + private ResourceBeanWrapper resource; - public DeleteResourceEvent(ResourceBean resource) { + public DeleteResourceEvent(ResourceBeanWrapper resource) { this.resource = resource; } - public ResourceBean getResource() { + public ResourceBeanWrapper getResource() { return resource; } 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 b23cc1c..fb7c079 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 @@ -4,7 +4,7 @@ import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherSe import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherServiceAsync; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.Encoder; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.AddResourceEvent; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBeanWrapper; import com.github.gwtbootstrap.client.ui.AlertBlock; import com.github.gwtbootstrap.client.ui.Button; @@ -98,16 +98,16 @@ public class AddResourceToDataset extends Composite{ } // collect data and build up the bean - final ResourceBean resource = new ResourceBean(resourceUrlTextBox.getText(), resourceNameTextBox.getText(), resourceDescriptionTextArea.getText()); + final ResourceBeanWrapper resource = new ResourceBeanWrapper(resourceUrlTextBox.getText(), resourceNameTextBox.getText(), resourceDescriptionTextArea.getText()); // disable add button addResourceButton.setEnabled(false); // try to create - ckanServices.addResourceToDataset(resource, datasetId, owner, new AsyncCallback() { + ckanServices.addResourceToDataset(resource, datasetId, owner, new AsyncCallback() { @Override - public void onSuccess(ResourceBean result) { + public void onSuccess(ResourceBeanWrapper result) { if(result != null){ showAlert("Resource created correctly", AlertType.SUCCESS); diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddedResourcesSummary.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddedResourcesSummary.java index e52ff7b..d8d3285 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddedResourcesSummary.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/AddedResourcesSummary.java @@ -9,7 +9,7 @@ import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.AddResou 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.ResourceBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBeanWrapper; import com.github.gwtbootstrap.client.ui.Accordion; import com.github.gwtbootstrap.client.ui.AccordionGroup; @@ -46,7 +46,7 @@ public class AddedResourcesSummary extends Composite{ private HandlerManager eventBus; // list of added resources (beans) - List addedResources; + List addedResources; // the owner private String owner; @@ -66,7 +66,7 @@ public class AddedResourcesSummary extends Composite{ bind(); // init list - addedResources = new ArrayList(); + addedResources = new ArrayList(); } /** @@ -81,7 +81,7 @@ public class AddedResourcesSummary extends Composite{ public void onAddedResource(AddResourceEvent addResourceEvent) { // get the resource - final ResourceBean justAddedResource = addResourceEvent.getResource(); + final ResourceBeanWrapper justAddedResource = addResourceEvent.getResource(); // Build an accordion to show resource info Accordion accordion = new Accordion(); @@ -128,7 +128,7 @@ public class AddedResourcesSummary extends Composite{ public void onDeletedResource(DeleteResourceEvent deleteResourceEvent) { // to delete - ResourceBean toDelete = deleteResourceEvent.getResource(); + ResourceBeanWrapper toDelete = deleteResourceEvent.getResource(); // find it for(int i = 0; i < addedResources.size(); i++){ 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 74e0d7f..b8ca84b 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 @@ -525,7 +525,7 @@ public class CreateDatasetForm extends Composite{ } receivedBean.setCustomFields(customFieldsMap); - + // alert alertOnCreate("Trying to create dataset, please wait", AlertType.INFO); @@ -728,7 +728,18 @@ public class CreateDatasetForm extends Composite{ errorMessage = "Missing title"; return errorMessage; } - + + // better check for the title + String regexTitleSubWord = "^[a-zA-Z0-9_]+$"; + String[] splittedTitle = titleTextBox.getText().split(" "); + + for (String word : splittedTitle) { + + if(!word.matches(regexTitleSubWord)) + return "Please note that only alphanumeric characters are allowed for the title"; + + } + // name reg expression String regexName = "^[a-zA-Z\\s]+"; if(!validateByRegExpression(maintainerTextbox.getText(), regexName)){ 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 bbab41b..b0ad475 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 @@ -1,18 +1,10 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.server; -import java.net.HttpURLConnection; -import java.net.URL; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; - -import net.htmlparser.jericho.Renderer; -import net.htmlparser.jericho.Segment; -import net.htmlparser.jericho.Source; import org.gcube.common.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; @@ -22,6 +14,8 @@ import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.datacatalogue.ckanutillibrary.CKanUtilsFactory; +import org.gcube.datacatalogue.ckanutillibrary.CKanUtilsImpl; +import org.gcube.datacatalogue.ckanutillibrary.models.ResourceBean; import org.gcube.datacatalogue.metadatadiscovery.DataCalogueMetadataFormatReader; import org.gcube.datacatalogue.metadatadiscovery.bean.MetadataType; import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataField; @@ -34,7 +28,7 @@ import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.LicensesBean; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.MetaDataProfileBean; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.MetaDataTypeWrapper; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.MetadataFieldWrapper; -import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBean; +import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceBeanWrapper; import org.gcube.vomanagement.usermanagement.UserManager; import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager; import org.gcube.vomanagement.usermanagement.model.UserModel; @@ -43,13 +37,6 @@ import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.liferay.portal.service.UserLocalServiceUtil; -import eu.trentorise.opendata.jackan.CheckedCkanClient; -import eu.trentorise.opendata.jackan.model.CkanDataset; -import eu.trentorise.opendata.jackan.model.CkanOrganization; -import eu.trentorise.opendata.jackan.model.CkanPair; -import eu.trentorise.opendata.jackan.model.CkanResource; -import eu.trentorise.opendata.jackan.model.CkanTag; - /** * Server side of the data publisher. * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) @@ -60,43 +47,6 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C // Logger private static final org.slf4j.Logger logger = LoggerFactory.getLogger(CKANPublisherServicesImpl.class); - /** - * Return the ckan catalogue url for this scope. - * @return - */ - private String getCatalogueUrl(){ - - logger.debug("Request for catalogue url"); - - try{ - String currentScope = ScopeProvider.instance.get(); - return CKanUtilsFactory.getInstance().getCkanUtilsForScope(currentScope).getCatalogueUrl(); - }catch(Exception e){ - logger.error("Failed to retrieve catalogue url information", e); - } - - return null; - } - - /** - * Retrieve the api key for this user - * @param owner - * @return - */ - private String getCKANApikeyFromUser(String owner) { - - logger.debug("Request for user api key"); - - try{ - String currentScope = ScopeProvider.instance.get(); - return CKanUtilsFactory.getInstance().getCkanUtilsForScope(currentScope).getApiKeyFromUser(owner); - }catch(Exception e){ - logger.error("Failed to retrieve api key for user " + owner, e); - } - - return null; - } - /** * Retrieve the list of organizations in which the user can publish * @param owner @@ -230,7 +180,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C DatasetMetadataBean bean = null; - logger.info("Bean request for " + folderId + " and " + owner); + logger.info("DatasetBean request for " + folderId + " and " + owner); if(isWithinPortal()){ try{ @@ -283,7 +233,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C bean.setResourcesIds(childrenIds); } - + // retrieve the metadata List metadataBeans = getMetadataProfilesList(); bean.setMetadataList(metadataBeans); @@ -371,152 +321,99 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C @Override public DatasetMetadataBean createCKanDataset(DatasetMetadataBean toCreate, boolean isWorkspaceRequest) { + + logger.debug("Request for creating a dataset with these information " + toCreate); - // retrieve ckan's catalog url - String ckanPortalUrl = getCatalogueUrl(); - - // retrieve the owner identifier (i.e. costantino.perciante) - String owner = toCreate.getOwnerIdentifier(); - - // retrieve the api key for this user - String apiKey = getCKANApikeyFromUser(fromOwnerToCKanOwner(owner)); - - logger.info("Trying to create the dataset described by this bean " + toCreate + " into CKAN catalog at url " + ckanPortalUrl); - - // Checked client - CheckedCkanClient client = new CheckedCkanClient(ckanPortalUrl, apiKey); - - // create the base dataset and fill it - CkanDataset dataset = new CkanDataset(); - - // set dataset info (same id as the folder) - dataset.setId(toCreate.getId()); - - // get the name from the title - dataset.setName(nameFromTitle(toCreate.getTitle())); - dataset.setTitle(toCreate.getTitle()); - - CkanOrganization orgOwner = client.getOrganization(toCreate.getSelectedOrganization()); - dataset.setOwnerOrg(orgOwner.getId()); - dataset.setAuthor(toCreate.getAuthor()); - dataset.setAuthorEmail(toCreate.getAuthorEmail()); - dataset.setMaintainer(toCreate.getMaintainer()); - dataset.setMaintainerEmail(toCreate.getMaintainerEmail()); - dataset.setVersion(String.valueOf(toCreate.getVersion())); - - // description must be escaped - Source description = new Source(toCreate.getDescription()); - Segment htmlSeg = new Segment(description, 0, description.length()); - Renderer htmlRend = new Renderer(htmlSeg); - dataset.setNotes(htmlRend.toString()); - - logger.debug("Description (escaped is ) " + htmlRend.toString()); - - // iterate over the licenses to find the id of the chosen one - String chosenLicense = toCreate.getLicense(); - String licenseId = findLicenseIdByLicense(chosenLicense); - dataset.setLicenseId(licenseId); - - // set the tags, if any - if(toCreate.getTags() != null && !toCreate.getTags().isEmpty()){ - - // convert to ckan tags - List ckanTags = new ArrayList(toCreate.getTags().size()); - for (String stringTag : toCreate.getTags()) { - ckanTags.add(new CkanTag(stringTag)); - } - - dataset.setTags(ckanTags); - } - - // set the custom fields, if any - if(toCreate.getCustomFields() != null && !toCreate.getCustomFields().isEmpty()){ - - // iterate and create - Iterator> iterator = toCreate.getCustomFields().entrySet().iterator(); - - List extras = new ArrayList(toCreate.getCustomFields().entrySet().size()); - - while (iterator.hasNext()) { - - Map.Entry entry = (Map.Entry) iterator.next(); - extras.add(new CkanPair(entry.getKey(), entry.getValue())); - - } - - dataset.setExtras(extras); - } - - // check if we need to add the resources - if(toCreate.isAddResources() && isWorkspaceRequest){ - - logger.debug("We need to add resources to the dataset"); - - try{ - - Workspace ws = HomeLibrary - .getHomeManagerFactory() - .getHomeManager() - .getHome(toCreate.getOwnerIdentifier()).getWorkspace(); - - List resources = new ArrayList(); - - - for(String resourceId: toCreate.getResourcesIds()){ - - FolderItem item = (FolderItem)ws.getItem(resourceId); - CkanResource newResource = new CkanResource(); - newResource.setDescription(item.getDescription()); - newResource.setId(item.getId()); - newResource.setUrl(item.getPublicLink(false)); - newResource.setName(item.getName()); - newResource.setMimetype(item.getMimeType()); - newResource.setOwner(fromOwnerToCKanOwner(owner)); - resources.add(newResource); - } - - // add to the dataset - dataset.setResources(resources); - - }catch(Exception e){ - logger.error("Unable to add those resources to the dataset", e); - } - - } - - // try to create - CkanDataset res = null; try{ + + String currentScope = ScopeProvider.instance.get(); - res = client.createDataset(dataset); + // get the owner + String username = fromOwnerToCKanOwner(toCreate.getOwnerIdentifier()); + CKanUtilsImpl utilityInstance = CKanUtilsFactory.getInstance().getCkanUtilsForScope(currentScope); - // add source and id to the incoming bean - toCreate.setId(res.getId()); - toCreate.setSource(getCatalogueUrl() + "/dataset/" + res.getName()); + // set dataset info (same id as the folder, if the request comes from the workspace) + String withId = null; + if(isWorkspaceRequest) + withId = toCreate.getId(); - // set visibility - setVisibility(toCreate, orgOwner.getId()); + String title = toCreate.getTitle(); + String organizationNameOrId = toCreate.getSelectedOrganization(); + String author = toCreate.getAuthor(); + String authorMail = toCreate.getAuthorEmail(); + String maintainer = toCreate.getMaintainer(); + String maintainerMail = toCreate.getMaintainerEmail(); + long version = toCreate.getVersion(); + String description = toCreate.getDescription(); + String chosenLicense = toCreate.getLicense(); + String licenseId = findLicenseIdByLicense(chosenLicense); + List listOfTags = toCreate.getTags(); + Map customFields = toCreate.getCustomFields(); + boolean setPublic = toCreate.getVisibility(); + List resources = new ArrayList(); + // build the resource (if it is a workspaceRequest type) + if(toCreate.isAddResources() && isWorkspaceRequest){ + + 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); + + } + + }catch(Exception e){ + logger.error("Unable to add those resources to the dataset", e); + } + } + + + String datasetId = utilityInstance.createCKanDataset(username, withId, title, organizationNameOrId, author, + authorMail, maintainer, maintainerMail, version, description, licenseId, + listOfTags, customFields, resources, setPublic); + + if(datasetId != null){ + + logger.debug("Dataset created!"); + toCreate.setId(datasetId); + + // retrieve the url + String datasetUrl = utilityInstance.getUrlFromDatasetIdOrName(username, datasetId); + + toCreate.setSource(datasetUrl); + return toCreate; + + }else{ + + logger.error("Failed to create the dataset"); + + } }catch(Exception e){ - - // try to update - logger.error("Error while creating the dataset, probably it already exists.", e); - + logger.error("Unable to create the dataset", e); } - - if(res != null) - logger.debug("Dataset created/updated " + res.getId()); - else{ - logger.error("Dataset described by " + toCreate + " not created!"); - return null; - } - - return toCreate; + + return null; } /** - * Ckan username has _ instead of . (that is, costantino_perciante) + * Ckan username has _ instead of . (that is, costantino.perciante -> costantino_perciante) * @param owner * @return */ @@ -524,104 +421,41 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C return owner.replaceAll("\\.", "_"); } - /** - * Set the dataset visibility. - * @param created - * @param orgOwnerId - * @throws Exception - */ - private void setVisibility(DatasetMetadataBean created, String orgOwnerId) throws Exception{ - - logger.debug("Setting visibility of the dataset"); - // set its visibility (true means public, false means private) - boolean mustbePrivate = !created.getVisibility(); - String currentScope = ScopeProvider.instance.get(); - - CKanUtilsFactory.getInstance(). - getCkanUtilsForScope(currentScope). - setDatasetPrivate(mustbePrivate, orgOwnerId, created.getId(), fromOwnerToCKanOwner(created.getOwnerIdentifier())); - - } - - /** - * Generate the catalogue's dataset name from its title - * @param title - * @return - */ - private String nameFromTitle(String title) { - String convertedName = title.replaceAll(" ", "_"); - convertedName = convertedName.replaceAll("\\.", "_"); - convertedName = convertedName.toLowerCase(); - if(convertedName.endsWith("_")) - convertedName = convertedName.substring(0, convertedName.length() - 2); - - return convertedName; - } - - /** - * Utility methods - * @param URLName - * @return - */ - private static boolean exists(String URLName){ - try { - HttpURLConnection.setFollowRedirects(true); - HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection(); - con.setRequestMethod("HEAD"); - logger.debug("Return code is " + con.getResponseCode()); - return (con.getResponseCode() == HttpURLConnection.HTTP_OK); - } - catch (Exception e) { - logger.error("Exception while checking url", e); - return false; - } - } - @Override - public ResourceBean addResourceToDataset(ResourceBean resourceBean, String datasetId, String owner) { + public ResourceBeanWrapper addResourceToDataset(ResourceBeanWrapper resource, String datasetId, String owner) { logger.debug("Incoming request for creating new resource for dataset with id " + datasetId); - logger.debug("Owner is " + owner + " and resource is " + resourceBean); + logger.debug("Owner is " + owner + " and resource is " + resource); - // of course, if it exists - if(exists(resourceBean.getUrl())){ + try{ - try{ - // retrieve ckan's catalog url - String ckanPortalUrl = getCatalogueUrl(); + String currentScope = ScopeProvider.instance.get(); - // retrieve the api key for this user - String apiKey = getCKANApikeyFromUser(fromOwnerToCKanOwner(owner)); + ResourceBean resourceBean = new ResourceBean( + resource.getUrl(), + resource.getName(), + resource.getDescription(), + null, + fromOwnerToCKanOwner(owner), + datasetId, + null); - CkanResource resource = new CkanResource(ckanPortalUrl, datasetId); - resource.setName(resourceBean.getName()); + String resourceId = CKanUtilsFactory.getInstance(). + getCkanUtilsForScope(currentScope). + addResourceToDataset(resourceBean); - // escape description - Source description = new Source(resourceBean.getDescription()); - Segment htmlSeg = new Segment(description, 0, description.length()); - Renderer htmlRend = new Renderer(htmlSeg); + if(resourceId != null){ - resource.setDescription(htmlRend.toString()); - resource.setUrl(resourceBean.getUrl()); - resource.setOwner(fromOwnerToCKanOwner(owner)); + logger.debug("Resource " + resource.getName() + " is now available"); - // Checked client - CheckedCkanClient client = new CheckedCkanClient(ckanPortalUrl, apiKey); - CkanResource createdRes = client.createResource(resource); + // set its id and turn it to the client + resource.setId(resourceId); + return resource; - if(createdRes != null){ - - logger.debug("Resource " + createdRes.getName() + " is now available"); - - // set its id and turn it to the client - resourceBean.setId(createdRes.getId()); - return resourceBean; - - } - - }catch(Exception e){ - logger.error("Unable to create new resource", e); } + + }catch(Exception e){ + logger.error("Unable to create new resource", e); } logger.debug("No resource created"); @@ -630,29 +464,29 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C } @Override - public boolean deleteResourceFromDataset(ResourceBean resource, + public boolean deleteResourceFromDataset(ResourceBeanWrapper resource, String owner) { logger.debug("Request for deleting resource " + resource); + boolean deleted = false; + try{ + String currentScope = ScopeProvider.instance.get(); - // retrieve ckan's catalog url - String ckanPortalUrl = getCatalogueUrl(); + deleted = CKanUtilsFactory.getInstance(). + getCkanUtilsForScope(currentScope). + deleteResourceFromDataset(fromOwnerToCKanOwner(owner), resource.getId()); - // retrieve the api key for this user - String apiKey = getCKANApikeyFromUser(fromOwnerToCKanOwner(owner)); - - // Checked client - CheckedCkanClient client = new CheckedCkanClient(ckanPortalUrl, apiKey); - client.deleteResource(resource.getId()); - - return true; + if(deleted){ + logger.debug("Resource described by " + resource + " deleted"); + }else + logger.error("Resource described by " + resource + " NOT deleted"); }catch(Exception e){ - logger.error("Unable to delete such resource", e); + logger.error("Error while trying to delete resource described by " + resource, e); } - return false; + return deleted; } } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/MetaDataProfileBean.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/MetaDataProfileBean.java index 3eb9391..a8451e5 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/MetaDataProfileBean.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/MetaDataProfileBean.java @@ -4,7 +4,7 @@ import java.io.Serializable; import java.util.List; /** - * A MetaDataProfileBean with its children (MetaDataFormat) + * A MetaDataProfileBean with its children (MetaDataType and MetaDataFields) * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ public class MetaDataProfileBean implements Serializable{ diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBean.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBeanWrapper.java similarity index 85% rename from src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBean.java rename to src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBeanWrapper.java index 6ce3c1e..a96f70f 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBean.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/shared/ResourceBeanWrapper.java @@ -3,10 +3,10 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.shared; import java.io.Serializable; /** - * A dataset's resource bean. + * A dataset's resource bean * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ -public class ResourceBean implements Serializable{ +public class ResourceBeanWrapper implements Serializable{ private static final long serialVersionUID = -6542455246456049712L; private String url; @@ -14,7 +14,7 @@ public class ResourceBean implements Serializable{ private String description; private String id; - public ResourceBean(){ + public ResourceBeanWrapper(){ super(); } @@ -23,7 +23,7 @@ public class ResourceBean implements Serializable{ * @param name * @param description */ - public ResourceBean(String url, String name, String description) { + public ResourceBeanWrapper(String url, String name, String description) { super(); this.url = url; this.name = name; @@ -36,7 +36,7 @@ public class ResourceBean implements Serializable{ * @param description * @param id */ - public ResourceBean(String url, String name, String description, String id) { + public ResourceBeanWrapper(String url, String name, String description, String id) { super(); this.url = url; this.name = name;