diff --git a/CHANGELOG.md b/CHANGELOG.md
index b2e4d31..5154fba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v2.1.3-SNAPSHOT] - 2023-07-25
+
+**Enhancement**
+
+- [#25433] Added spinner during resource creation
+
## [v2.1.2] - 2023-03-10
**Bug fixes**
diff --git a/pom.xml b/pom.xml
index 8e55373..36790ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,13 +7,13 @@
maven-parent
org.gcube.tools
- 1.1.0
+ 1.2.0
org.gcube.portlets.widgets
ckan-metadata-publisher-widget
- 2.1.2
+ 2.1.3-SNAPSHOT
gCube Ckan metadata publisher widget
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java
index 0b0bdc7..5298b61 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/icons/Images.java
@@ -1,13 +1,20 @@
package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.icons;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
public interface Images extends ClientBundle {
+ /** The Constant ICONS. */
+ public static final Images ICONS = GWT.create(Images.class);
+
@Source("file.png")
ImageResource fileIcon();
@Source("folder.png")
ImageResource folderIcon();
+
+ @Source("loading.gif")
+ ImageResource loading();
}
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.java
index 3378aff..9052cad 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.java
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.java
@@ -3,6 +3,7 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources;
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.ui.utils.LoaderIcon;
import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean;
import com.github.gwtbootstrap.client.ui.AlertBlock;
@@ -23,6 +24,7 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
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.Widget;
/**
@@ -57,6 +59,7 @@ public class AddResourceToDataset extends Composite{
@UiField Button goToDatasetButton;
@UiField ControlGroup urlControlGroup;
@UiField ControlGroup nameControlGroup;
+ @UiField FlowPanel infoPanel;
public AddResourceToDataset(HandlerManager eventBus, String datasetId, String datasetTitle, String datasetOrg, String owner, final String datasetUrl) {
initWidget(uiBinder.createAndBindUi(this));
@@ -130,11 +133,15 @@ public class AddResourceToDataset extends Composite{
// disable add button
addResourceButton.setEnabled(false);
+ LoaderIcon loader = new LoaderIcon("Adding resource, please wait...");
+ infoPanel.add(loader);
+
// try to create
ckanServices.addResourceToDataset(resource, datasetId, new AsyncCallback() {
@Override
public void onSuccess(ResourceElementBean result) {
+ infoPanel.clear();
if(result != null){
showAlert("Resource created correctly", AlertType.SUCCESS);
@@ -153,7 +160,7 @@ public class AddResourceToDataset extends Composite{
@Override
public void onFailure(Throwable caught) {
-
+ infoPanel.clear();
showAlert("Unable to add this resource, sorry. Error is: " + caught.getMessage(), AlertType.ERROR);
}
diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.ui.xml
index 108e98c..b9a2d94 100644
--- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.ui.xml
+++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/resources/AddResourceToDataset.ui.xml
@@ -59,8 +59,10 @@
The URL of the resource you are
- publishing (only HTTPS URLs are allowed). If your resource is a file that you own on your
- desktop, please upload that file to your workspace and generate a
+ publishing (only HTTPS URLs are allowed). If your resource is a
+ file that you own on your
+ desktop, please upload that file to your
+ workspace and generate a
public URL for that file.
@@ -108,6 +110,9 @@
Add
+
+
+
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 af7be57..b2f1658 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
@@ -50,18 +50,18 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.liferay.portal.service.UserLocalServiceUtil;
-
-
/**
* Server side of the data publisher.
+ *
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
*/
-public class CKANPublisherServicesImpl extends RemoteServiceServlet implements CKanPublisherService{
+public class CKANPublisherServicesImpl extends RemoteServiceServlet implements CKanPublisherService {
private static final long serialVersionUID = 7252248774050361697L;
// Logger
- //private static final org.slf4j.Logger logger = LoggerFactory.getLogger(CKANPublisherServicesImpl.class);
+ // private static final org.slf4j.Logger logger =
+ // LoggerFactory.getLogger(CKANPublisherServicesImpl.class);
private static final Logger logger = LoggerFactory.getLogger(CKANPublisherServicesImpl.class);
private static final String ITEM_URL_FIELD = "Item URL";
private static final String SYS_TYPE = "system:type";
@@ -70,7 +70,6 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
// map
private ConcurrentHashMap mapOrganizationScope = new ConcurrentHashMap();
-
/**
* Dev mode set contexts.
*/
@@ -80,7 +79,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
GenericUtils.getCurrentContext(getThreadLocalRequest(), true);
GenericUtils.getCurrentToken(getThreadLocalRequest(), true);
}
-
+
}
/**
@@ -89,45 +88,50 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @param scope if it is null it is evaluated from the session
* @return the catalogue
*/
- public DataCatalogue getCatalogue(String scope){
+ public DataCatalogue getCatalogue(String scope) {
DataCatalogue instance = null;
String scopeInWhichDiscover = null;
- try{
- scopeInWhichDiscover = scope != null && !scope.isEmpty() ? scope : GenericUtils.getCurrentContext(getThreadLocalRequest(), false);
+ try {
+ scopeInWhichDiscover = scope != null && !scope.isEmpty() ? scope
+ : GenericUtils.getCurrentContext(getThreadLocalRequest(), false);
logger.debug("Discovering ckan instance into scope " + scopeInWhichDiscover);
instance = DataCatalogueFactory.getFactory().getUtilsPerScope(scopeInWhichDiscover);
- }catch(Exception e){
- logger.warn("Unable to retrieve ckan utils in scope " + scopeInWhichDiscover + ". Error is " + e.getLocalizedMessage());
+ } catch (Exception e) {
+ logger.warn("Unable to retrieve ckan utils in scope " + scopeInWhichDiscover + ". Error is "
+ + e.getLocalizedMessage());
}
return instance;
}
/**
- * Retrieve the list of organizations in which the user can publish (roles ADMIN/EDITOR).
+ * Retrieve the list of organizations in which the user can publish (roles
+ * ADMIN/EDITOR).
*
* @param username the username
- * @param scope the scope
+ * @param scope the scope
* @return the list of organizations
* @throws UserManagementSystemException the user management system exception
- * @throws GroupRetrievalFault the group retrieval fault
+ * @throws GroupRetrievalFault the group retrieval fault
*/
- private List getUserOrganizationsListAdmin(String username, String scope) throws UserManagementSystemException, GroupRetrievalFault {
+ private List getUserOrganizationsListAdmin(String username, String scope)
+ throws UserManagementSystemException, GroupRetrievalFault {
logger.debug("Request for user " + username + " organizations list");
List orgsName = new ArrayList();
HttpSession httpSession = getThreadLocalRequest().getSession();
- String keyPerScope = CatalogueUtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_ORGANIZATIONS_PUBLISH_KEY, scope);
+ String keyPerScope = CatalogueUtilMethods
+ .concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_ORGANIZATIONS_PUBLISH_KEY, scope);
- if(httpSession.getAttribute(keyPerScope) != null){
- orgsName = (List)httpSession.getAttribute(keyPerScope);
+ if (httpSession.getAttribute(keyPerScope) != null) {
+ orgsName = (List) httpSession.getAttribute(keyPerScope);
logger.info("List of organizations was into session " + orgsName);
- }
- else{
+ } else {
String gatewayURL = GenericUtils.getGatewayClientHostname(getThreadLocalRequest());
- logger.info("The Gateway URL is: "+gatewayURL);
- CatalogueRoleManager.getHighestRole(scope, username, GenericUtils.getGroupFromScope(scope).getGroupName(), this, orgsName, gatewayURL);
+ logger.info("The Gateway URL is: " + gatewayURL);
+ CatalogueRoleManager.getHighestRole(scope, username, GenericUtils.getGroupFromScope(scope).getGroupName(),
+ this, orgsName, gatewayURL);
httpSession.setAttribute(keyPerScope, orgsName);
logger.info("Organizations name for user " + username + " has been saved into session " + orgsName);
}
@@ -144,23 +148,22 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
try {
UserLocalServiceUtil.getService();
return true;
- }
- catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) {
+ } catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) {
logger.trace("Development Mode ON");
return false;
}
}
-
+
/**
* Gets the workspace from storage hub.
*
* @return the workspace from storage hub
- * @throws Exception
- * the exception
+ * @throws Exception the exception
*/
protected Workspace getWorkspaceFromStorageHub() throws Exception {
GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest());
- StorageHubWrapper storageHubWrapper = WorkspaceUtils.getStorageHubWrapper(this.getThreadLocalRequest(), null, user);
+ StorageHubWrapper storageHubWrapper = WorkspaceUtils.getStorageHubWrapper(this.getThreadLocalRequest(), null,
+ user);
return storageHubWrapper.getWorkspace();
}
@@ -190,8 +193,9 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
HttpSession httpSession = getThreadLocalRequest().getSession();
String scope = GenericUtils.getScopeFromClientUrl(getThreadLocalRequest());
logger.info("Request for CKAN licenses for scope " + scope);
- String keyPerScope = CatalogueUtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_LICENSES_KEY, scope);
-
+ String keyPerScope = CatalogueUtilMethods
+ .concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_LICENSES_KEY, scope);
+
// if(!isWithinPortal()){
// logger.info("DEV MODE returning funny licenses...");
// List licenses = new ArrayList();
@@ -200,11 +204,10 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
// }
List licensesBean = null;
- if(httpSession.getAttribute(keyPerScope) != null){
- licensesBean = (List)httpSession.getAttribute(keyPerScope);
+ if (httpSession.getAttribute(keyPerScope) != null) {
+ licensesBean = (List) httpSession.getAttribute(keyPerScope);
logger.info("List of licenses was into session");
- }
- else{
+ } else {
List licenses = getCatalogue(scope).getLicenses();
licensesBean = new ArrayList();
for (CkanLicense license : licenses) {
@@ -212,10 +215,11 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
}
// sort the list
- Collections.sort(licensesBean, new Comparator(){
- public int compare(LicenseBean l1, LicenseBean l2){
+ Collections.sort(licensesBean, new Comparator() {
+ public int compare(LicenseBean l1, LicenseBean l2) {
return l1.getTitle().compareTo(l2.getTitle());
- }});
+ }
+ });
httpSession.setAttribute(keyPerScope, licensesBean);
logger.info("List of licenses has been saved into session");
@@ -223,7 +227,6 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
return licensesBean;
}
-
/**
* Gets the dataset bean.
@@ -233,21 +236,21 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @throws Exception the exception
*/
@Override
- public DatasetBean getDatasetBean(String folderId) throws Exception{
+ public DatasetBean getDatasetBean(String folderId) throws Exception {
DatasetBean bean = null;
String userName = GenericUtils.getCurrentUser(getThreadLocalRequest()).getUsername();
logger.info("DatasetBean request for " + folderId + " and " + userName);
- if(isWithinPortal()){
- try{
+ if (isWithinPortal()) {
+ try {
String scope = GenericUtils.getScopeFromClientUrl(getThreadLocalRequest());
logger.debug("Scope recovered from session is " + scope);
- logger.debug("Request dataset metadata bean for folder with id " + folderId
- + " whose owner is " + userName);
+ logger.debug(
+ "Request dataset metadata bean for folder with id " + folderId + " whose owner is " + userName);
UserManager liferUserManager = new LiferayUserManager();
GCubeUser userOwner = liferUserManager.getUserByUsername(userName);
@@ -268,21 +271,21 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
bean.setTagsVocabulary(discoverTagsVocabulary(scope));
// if the request comes from the workspace
- if(folderId != null && !folderId.isEmpty()){
+ if (folderId != null && !folderId.isEmpty()) {
Workspace workspace = getWorkspaceFromStorageHub();
WorkspaceUtils.toWorkspaceResource(folderId, userName, bean, workspace);
}
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Error while retrieving bean information", e);
throw new Exception("Error while retrieving basic information " + e.getMessage());
}
- }else{
+ } else {
logger.info("DEV MODE DETECTED");
GenericUtils.getCurrentToken(getThreadLocalRequest(), true);
- try{
+ try {
bean = new DatasetBean();
bean.setId(folderId);
bean.setDescription("This is a fantastic description");
@@ -295,19 +298,19 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
bean.setMaintainer("Francesco Mangiacrapa");
bean.setMaintainerEmail("francesco.mangiacrapa@isti.cnr.it");
- //UPDATED By Francesco
+ // UPDATED By Francesco
String scope = GenericUtils.getCurrentContext(this.getThreadLocalRequest(), false);
- String vreName = scope.substring(scope.lastIndexOf("/")+1,scope.length());
- logger.debug("In dev mode using the scope: "+scope+" and VRE name: "+vreName);
+ String vreName = scope.substring(scope.lastIndexOf("/") + 1, scope.length());
+ logger.debug("In dev mode using the scope: " + scope + " and VRE name: " + vreName);
bean.setOrganizationList(Arrays.asList(new OrganizationBean(vreName, vreName.toLowerCase(), true)));
bean.setOwnerIdentifier(userName);
- if(folderId != null && !folderId.isEmpty()){
+ if (folderId != null && !folderId.isEmpty()) {
Workspace workspace = getWorkspaceFromStorageHub();
WorkspaceUtils.toWorkspaceResource(folderId, userName, bean, workspace);
}
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Error while building bean into dev mode", e);
throw new Exception("Error while retrieving basic information " + e.getMessage());
}
@@ -323,15 +326,15 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @param context the context
* @return a list of tags vocabulary
*/
- private List discoverTagsVocabulary(String context){
+ private List discoverTagsVocabulary(String context) {
logger.debug("Looking for vocabulary of tags in this context " + context);
String keyPerVocabulary = CatalogueUtilMethods.concatenateSessionKeyScope(TAGS_VOCABULARY_KEY, context);
List vocabulary = (List) getThreadLocalRequest().getSession().getAttribute(keyPerVocabulary);
- if(vocabulary == null){
+ if (vocabulary == null) {
vocabulary = DiscoverTagsList.discoverTagsList(context);
- if(vocabulary != null)
+ if (vocabulary != null)
getThreadLocalRequest().getSession().setAttribute(keyPerVocabulary, vocabulary);
}
@@ -348,7 +351,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @throws Exception the exception
*/
@Override
- public List getTagsForOrganization(String orgName) throws Exception{
+ public List getTagsForOrganization(String orgName) throws Exception {
return discoverTagsVocabulary(getScopeFromOrgName(orgName));
}
@@ -360,9 +363,9 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @throws Exception the exception
*/
@Override
- public DatasetBean createCKanDataset(DatasetBean toCreate) throws Exception{
+ public DatasetBean createCKanDataset(DatasetBean toCreate) throws Exception {
- try{
+ try {
devModeSetContexts();
logger.info("Request for creating a dataset with these information " + toCreate);
String userName = GenericUtils.getCurrentUser(getThreadLocalRequest()).getUsername();
@@ -380,7 +383,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
Map> customFields = toCreate.getCustomFields();
// add Type for custom fields
- if(toCreate.getChosenType() != null)
+ if (toCreate.getChosenType() != null)
customFields.put(SYS_TYPE, Arrays.asList(toCreate.getChosenType()));
boolean setPublic = toCreate.getVisibility();
@@ -388,9 +391,9 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
// get the list of resources and convert to ResourceBean
List resources = null;
ResourceElementBean resourcesToAdd = toCreate.getResourceRoot();
-
- //converting to resources to be added
- if(resourcesToAdd != null){
+
+ // converting to resources to be added
+ if (resourcesToAdd != null) {
Workspace workspace = getWorkspaceFromStorageHub();
resources = WorkspaceUtils.toResources(toCreate, workspace, userName);
}
@@ -398,63 +401,52 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
logger.debug("The user wants to publish in organization with name " + organizationNameOrId);
String scope = getScopeFromOrgName(organizationNameOrId);
DataCatalogue utils = getCatalogue(scope);
-
+
if (!isWithinPortal()) {
logger.debug("Should be added:");
for (String key : customFields.keySet()) {
- logger.debug("Custom field with key: "+key+", value: "+customFields.get(key));
+ logger.debug("Custom field with key: " + key + ", value: " + customFields.get(key));
}
}
-
- String datasetId = utils.createCkanDatasetMultipleCustomFields(userName,
- title,
- null,
- organizationNameOrId,
- author,
- authorMail,
- maintainer,
- maintainerMail,
- version,
- description,
- licenseId,
- listOfTags,
- customFields,
- resources,
- setPublic,
- true,
- true);
-
- if(datasetId != null){
+ String datasetId = utils.createCkanDatasetMultipleCustomFields(userName, title, null, organizationNameOrId,
+ author, authorMail, maintainer, maintainerMail, version, description, licenseId, listOfTags,
+ customFields, resources, setPublic, true, true);
+
+ if (datasetId != null) {
logger.info("Dataset created!");
toCreate.setId(datasetId);
- //#23491 Building the go to the item to "Catalogue Portlet URL" (instead of URI Resolver URL)
- String catalogueURL = utils.getPortletUrl();
- toCreate.setSource(String.format("%s?path=/dataset/%s", catalogueURL,datasetId));
- logger.debug("Returning dataset: "+toCreate);
-
- //#24744 Returning lazy object
+ // #23491 Building the go to the item to "Catalogue Portlet URL" (instead of URI
+ // Resolver URL)
+ String catalogueURL = utils.getPortletUrl();
+// logger.debug("Returning catalogueURL: "+catalogueURL);
+// logger.debug("Returning datasetId: "+datasetId);
+ toCreate.setSource(String.format("%s?path=/dataset/%s", catalogueURL, datasetId));
+ logger.debug("Returning getSource(): " + toCreate.getSource());
+ logger.debug("Returning dataset: " + toCreate);
+
+ // #24744 Returning lazy object
toCreate.setGroups(null);
toCreate.setCustomFields(null);
toCreate.setGroupsForceCreation(null);
toCreate.setMetadataList(null);
toCreate.setOrganizationList(null);
-
- logger.info("Returning lazy dataset: "+toCreate);
-
- //createdDatasetBean.getSource();
- //createdDatasetBean.getTitle();
+
+ logger.info("Returning lazy dataset: " + toCreate);
+
+ // createdDatasetBean.getSource();
+ // createdDatasetBean.getTitle();
// resourceForm = new AddResourceToDataset(eventBus, createdDatasetBean.getId(),
// createdDatasetBean.getTitle(),
// createdDatasetBean.getSelectedOrganization(), owner, datasetUrl);
return toCreate;
- }else{
+ } else {
logger.error("Failed to create the dataset");
}
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Error while creating item ", e);
throw new Exception(e.getMessage());
}
@@ -462,38 +454,35 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
return null;
}
-
+
/**
* Adds the resource to dataset.
*
- * @param resource the resource
+ * @param resource the resource
* @param datasetId the dataset id
* @return the resource element bean
* @throws Exception the exception
*/
@Override
- public ResourceElementBean addResourceToDataset(ResourceElementBean resource, String datasetId) throws Exception{
+ public ResourceElementBean addResourceToDataset(ResourceElementBean resource, String datasetId) throws Exception {
logger.info("called addResourceToDataset");
devModeSetContexts();
String username = GenericUtils.getCurrentUser(getThreadLocalRequest()).getUsername();
- logger.debug("Incoming request for creating new resource for dataset with id " + datasetId + " and organization name of the dataset is " + resource.getOrganizationNameDatasetParent());
+ logger.debug("Incoming request for creating new resource for dataset with id " + datasetId
+ + " and organization name of the dataset is " + resource.getOrganizationNameDatasetParent());
logger.debug("Owner is " + username + " and resource is " + resource);
- ResourceBean resourceBean = new ResourceBean(
- resource.getUrl(),
- resource.getName(),
- resource.getDescription(),
- null,
- username,
- datasetId,
- null);
+ ResourceBean resourceBean = new ResourceBean(resource.getUrl(), resource.getName(), resource.getDescription(),
+ null, username, datasetId, null);
- // get the scope in which we should discover the ckan instance given the organization name in which the dataset was created
+ // get the scope in which we should discover the ckan instance given the
+ // organization name in which the dataset was created
String scope = getScopeFromOrgName(resource.getOrganizationNameDatasetParent());
DataCatalogue catalogue = getCatalogue(scope);
- String resourceId = catalogue.addResourceToDataset(resourceBean, resource.getOrganizationNameDatasetParent(), username);
+ String resourceId = catalogue.addResourceToDataset(resourceBean, resource.getOrganizationNameDatasetParent(),
+ username);
- if(resourceId != null){
+ if (resourceId != null) {
logger.info("Resource " + resource.getName() + " is now available");
// set its id and turn it to the client
resource.setOriginalIdInWorkspace(resourceId);
@@ -512,26 +501,27 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @throws Exception the exception
*/
@Override
- public boolean deleteResourceFromDataset(ResourceElementBean resource) throws Exception{
+ public boolean deleteResourceFromDataset(ResourceElementBean resource) throws Exception {
logger.debug("Request for deleting resource " + resource);
boolean deleted = false;
devModeSetContexts();
- try{
- // get the scope in which we should discover the ckan instance given the organization name in which the dataset was created
+ try {
+ // get the scope in which we should discover the ckan instance given the
+ // organization name in which the dataset was created
String scope = getScopeFromOrgName(resource.getOrganizationNameDatasetParent());
DataCatalogue catalogue = getCatalogue(scope);
String username = GenericUtils.getCurrentUser(getThreadLocalRequest()).getUsername();
- deleted = catalogue.deleteResourceFromDataset(resource.getOriginalIdInWorkspace(),username);
- if(deleted){
+ deleted = catalogue.deleteResourceFromDataset(resource.getOriginalIdInWorkspace(), username);
+ if (deleted) {
logger.info("Resource described by " + resource + " deleted");
- }else
+ } else
logger.error("Resource described by " + resource + " NOT deleted");
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Error while trying to delete resource described by " + resource, e);
throw new Exception("Error while trying to delete resource." + e.getMessage());
}
return deleted;
-
+
}
/**
@@ -542,15 +532,15 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @throws Exception the exception
*/
@Override
- public List getProfiles(String orgName) throws Exception{
+ public List getProfiles(String orgName) throws Exception {
logger.debug("Requested profiles for products into orgName " + orgName);
List toReturn = new ArrayList();
- try{
+ try {
String evaluatedScope = getScopeFromOrgName(orgName);
logger.debug("Evaluated scope is " + evaluatedScope);
toReturn = MetadataDiscovery.getMetadataProfilesList(evaluatedScope, getThreadLocalRequest());
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Failed to retrieve profiles for scope coming from organization name " + orgName, e);
throw e;
}
@@ -561,57 +551,61 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
/**
* Dataset id already exists.
*
- * @param title the title
+ * @param title the title
* @param orgName the org name
* @return true, if successful
* @throws Exception the exception
*/
@Override
- public boolean datasetIdAlreadyExists(String title, String orgName) throws Exception{
- if(title == null || title.isEmpty())
+ public boolean datasetIdAlreadyExists(String title, String orgName) throws Exception {
+ if (title == null || title.isEmpty())
return true; // it's an error somehow
- try{
+ try {
String scopeFromOrgName = getScopeFromOrgName(orgName);
String idFromTitle = CatalogueUtilMethods.fromProductTitleToName(title);
- logger.debug("Evaluating if dataset with id " + title + " in context " + scopeFromOrgName + " already exists");
+ logger.debug(
+ "Evaluating if dataset with id " + title + " in context " + scopeFromOrgName + " already exists");
return getCatalogue(scopeFromOrgName).existProductWithNameOrId(idFromTitle);
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Unable to check if such a dataset id already exists", e);
throw new Exception("Unable to check if such a dataset id already exists " + e.getMessage());
}
}
/**
- * The method tries to retrieve the scope related to the organization using the map first,
- * if no match is found, it retrieves such information by using liferay
+ * The method tries to retrieve the scope related to the organization using the
+ * map first, if no match is found, it retrieves such information by using
+ * liferay
*/
- private String getScopeFromOrgName(String orgName){
+ private String getScopeFromOrgName(String orgName) {
- logger.info("Request for scope related to orgName " + orgName + " [map that will be used is " + mapOrganizationScope.toString() + "]");
- if(orgName == null || orgName.isEmpty())
+ logger.info("Request for scope related to orgName " + orgName + " [map that will be used is "
+ + mapOrganizationScope.toString() + "]");
+ if (orgName == null || orgName.isEmpty())
throw new IllegalArgumentException("orgName cannot be empty or null!");
String toReturn = null;
- if(isWithinPortal()){
- if(mapOrganizationScope.containsKey(orgName)) {
+ if (isWithinPortal()) {
+ if (mapOrganizationScope.containsKey(orgName)) {
toReturn = mapOrganizationScope.get(orgName);
- }else{
- try{
+ } else {
+ try {
String evaluatedScope = GenericUtils.retrieveScopeFromOrganizationName(orgName);
- //see #20801
- if(evaluatedScope==null || evaluatedScope.isEmpty()) {
- logger.warn("Scope detected for OrganizationName: "+orgName+" is null or empty, skipping filling 'mapOrganizationScope' and returning null");
+ // see #20801
+ if (evaluatedScope == null || evaluatedScope.isEmpty()) {
+ logger.warn("Scope detected for OrganizationName: " + orgName
+ + " is null or empty, skipping filling 'mapOrganizationScope' and returning null");
return toReturn;
}
mapOrganizationScope.put(orgName, evaluatedScope);
toReturn = evaluatedScope;
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Failed to retrieve scope from OrgName for organization " + orgName, e);
}
}
- }else{
- //UPDATED By FRANCESCO
+ } else {
+ // UPDATED By FRANCESCO
toReturn = GenericUtils.getCurrentContext(this.getThreadLocalRequest(), false);
mapOrganizationScope.put(orgName, toReturn);
}
@@ -630,54 +624,58 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
List toReturn = new ArrayList();
- if(isWithinPortal()){
+ if (isWithinPortal()) {
GCubeUser user = GenericUtils.getCurrentUser(getThreadLocalRequest());
String username = null;
- if(user!=null)
+ if (user != null)
username = user.getUsername();
- logger.debug("Request for user " + username + " groups. Organization name is " + orgName);
+ logger.debug("Request for user " + username + " groups. Organization name is " + orgName);
// get http session
HttpSession httpSession = getThreadLocalRequest().getSession();
- String scope = orgName != null ? getScopeFromOrgName(orgName) : GenericUtils.getScopeFromClientUrl(getThreadLocalRequest());
+ String scope = orgName != null ? getScopeFromOrgName(orgName)
+ : GenericUtils.getScopeFromClientUrl(getThreadLocalRequest());
// check if they are in session
- String keyPerScopeGroups = CatalogueUtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_GROUPS_MEMBER, scope);
+ String keyPerScopeGroups = CatalogueUtilMethods
+ .concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_GROUPS_MEMBER, scope);
- if(httpSession.getAttribute(keyPerScopeGroups) != null){
- toReturn = (List)httpSession.getAttribute(keyPerScopeGroups);
+ if (httpSession.getAttribute(keyPerScopeGroups) != null) {
+ toReturn = (List) httpSession.getAttribute(keyPerScopeGroups);
logger.info("Found user's groups in session " + toReturn);
- }else{
+ } else {
- //Fixing Incident #12563
- try{
+ // Fixing Incident #12563
+ try {
DataCatalogue catalogue = getCatalogue(scope);
- //Fixing Incident #12563
- if(username!=null && !username.isEmpty()){
- Map> mapRoleGroup = catalogue.getUserRoleByGroup(username);
+ // Fixing Incident #12563
+ if (username != null && !username.isEmpty()) {
+ Map> mapRoleGroup = catalogue
+ .getUserRoleByGroup(username);
Set>> set = mapRoleGroup.entrySet();
for (Entry> entry : set) {
Set> subSet = entry.getValue().entrySet();
for (Entry subEntry : subSet) {
- toReturn.add(new OrganizationBean(subEntry.getKey().getTitle(), subEntry.getKey().getName(), false));
+ toReturn.add(new OrganizationBean(subEntry.getKey().getTitle(),
+ subEntry.getKey().getName(), false));
}
}
httpSession.setAttribute(keyPerScopeGroups, toReturn);
- }else
- logger.warn("The API_KEY for "+username+ " is null or empty in the catalogue: "+catalogue.getCatalogueUrl());
- }catch(Exception e){
- logger.error("Error on recovery the user groups for "+username, e);
+ } else
+ logger.warn("The API_KEY for " + username + " is null or empty in the catalogue: "
+ + catalogue.getCatalogueUrl());
+ } catch (Exception e) {
+ logger.error("Error on recovery the user groups for " + username, e);
}
}
- }else{
+ } else {
logger.warn("Dev mode detected");
toReturn = Arrays.asList();
}
return toReturn;
}
-
/**
* Checks if is publisher user.
*
@@ -686,17 +684,17 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
* @throws Exception the exception
*/
@Override
- public boolean isPublisherUser(boolean isWorkspaceRequest) throws Exception{
+ public boolean isPublisherUser(boolean isWorkspaceRequest) throws Exception {
String username = GenericUtils.getCurrentUser(getThreadLocalRequest()).getUsername();
logger.info("Checking if the user " + username + " can publish or not on the catalogue");
- if(!isWithinPortal()){
+ if (!isWithinPortal()) {
logger.warn("OUT FROM PORTAL DETECTED RETURNING TRUE");
return true;
}
- try{
+ try {
HttpSession httpSession = this.getThreadLocalRequest().getSession();
@@ -704,38 +702,46 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
String scopePerCurrentUrl = GenericUtils.getScopeFromClientUrl(getThreadLocalRequest());
// get key per scope
- String keyPerScopeRole = CatalogueUtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_HIGHEST_ROLE, scopePerCurrentUrl);
- String keyPerScopeOrganizations = CatalogueUtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_ORGANIZATIONS_PUBLISH_KEY, scopePerCurrentUrl);
- String keyPerScopeGroups = CatalogueUtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_GROUPS_MEMBER, scopePerCurrentUrl);
+ String keyPerScopeRole = CatalogueUtilMethods
+ .concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_HIGHEST_ROLE, scopePerCurrentUrl);
+ String keyPerScopeOrganizations = CatalogueUtilMethods.concatenateSessionKeyScope(
+ SessionCatalogueAttributes.CKAN_ORGANIZATIONS_PUBLISH_KEY, scopePerCurrentUrl);
+ String keyPerScopeGroups = CatalogueUtilMethods
+ .concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_GROUPS_MEMBER, scopePerCurrentUrl);
- // check if this information was already into session(true means the user has at least in one org
+ // check if this information was already into session(true means the user has at
+ // least in one org
// the role editor), false that he is just a member so he cannot publish
RolesCkanGroupOrOrg role = (RolesCkanGroupOrOrg) httpSession.getAttribute(keyPerScopeRole);
// if the attribute was already set..
- if(role != null)
+ if (role != null)
return !role.equals(RolesCkanGroupOrOrg.MEMBER);
- else{
+ else {
- try{
+ try {
GroupManager gm = new LiferayGroupManager();
- String groupName = gm.getGroup(gm.getGroupIdFromInfrastructureScope(scopePerCurrentUrl)).getGroupName();
+ String groupName = gm.getGroup(gm.getGroupIdFromInfrastructureScope(scopePerCurrentUrl))
+ .getGroupName();
- // we build up also a list that keeps track of the scopes (orgs) in which the user has role ADMIN/EDITOR
+ // we build up also a list that keeps track of the scopes (orgs) in which the
+ // user has role ADMIN/EDITOR
List orgsInWhichAtLeastEditorRole = new ArrayList();
String gatewayURL = GenericUtils.getGatewayClientHostname(getThreadLocalRequest());
- logger.info("The Gateway URL is: "+gatewayURL);
- role = CatalogueRoleManager.getHighestRole(scopePerCurrentUrl, username, groupName, this, orgsInWhichAtLeastEditorRole, gatewayURL);
+ logger.info("The Gateway URL is: " + gatewayURL);
+ role = CatalogueRoleManager.getHighestRole(scopePerCurrentUrl, username, groupName, this,
+ orgsInWhichAtLeastEditorRole, gatewayURL);
// if he is an admin/editor preload:
- // 1) organizations in which he can publish (the widget will find these info in session)
- if(!role.equals(RolesCkanGroupOrOrg.MEMBER)){
+ // 1) organizations in which he can publish (the widget will find these info in
+ // session)
+ if (!role.equals(RolesCkanGroupOrOrg.MEMBER)) {
httpSession.setAttribute(keyPerScopeOrganizations, orgsInWhichAtLeastEditorRole);
String orgName = scopePerCurrentUrl.split("/")[scopePerCurrentUrl.split("/").length - 1];
httpSession.setAttribute(keyPerScopeGroups, getUserGroups(orgName));
}
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Unable to retrieve the role information for this user. Returning FALSE", e);
return false;
}
@@ -747,7 +753,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
logger.info("Does the user have the right to publish on the catalogue? " + role);
return !role.equals(RolesCkanGroupOrOrg.MEMBER);
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Failed to check the user's role", e);
throw new Exception("Failed to check if you are an Administrator or Editor " + e.getMessage());
}
@@ -762,10 +768,10 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C
*/
@Override
public boolean isGeoJSONValid(String geoJson) throws Exception {
- try{
+ try {
new ObjectMapper().readValue(geoJson, GeoJsonObject.class);
return true;
- }catch(Exception e){
+ } catch (Exception e) {
throw new Exception("GeoJSON field with value '" + geoJson + "' seems not valid!");
}
}