diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 13b3428..b90405e 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -3,11 +3,11 @@ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/distro/changelog.xml b/distro/changelog.xml index 0b82645..32db9ed 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,9 @@ + + [Incident #12563] Error when trying to publish the content of a workspace folder into the catalogue + @@ -39,9 +44,11 @@ component="org.gcube.portlets-widgets.ckan-metadata-publisher-widget.1-2-0" date="2016-12-11"> A post is automatically created by the Product Catalogue user - every time someone publishes + every time someone publishes + The user now can select all files in the hierarchy and publish - them + them + The user can now associate the product to the available groups Removed ASL session dependency @@ -52,7 +59,8 @@ Creation of a group is now supported Association of a dataset to a group is now supported Products are copied to .catalogue area when publishing is - performed from workspace + performed from workspace + org.gcube.portlets.widgets ckan-metadata-publisher-widget - 1.3.3-SNAPSHOT + 1.4.0-SNAPSHOT gCube Ckan metadata publisher widget 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 d855442..d9d2fc3 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 @@ -16,8 +16,8 @@ import javax.servlet.http.HttpSession; import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogue; import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogueFactory; -import org.gcube.datacatalogue.ckanutillibrary.server.utils.SessionCatalogueAttributes; import org.gcube.datacatalogue.ckanutillibrary.server.utils.CatalogueUtilMethods; +import org.gcube.datacatalogue.ckanutillibrary.server.utils.SessionCatalogueAttributes; import org.gcube.datacatalogue.ckanutillibrary.shared.ResourceBean; import org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherService; @@ -79,7 +79,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C DataCatalogue instance = null; String scopeInWhichDiscover = null; try{ - scopeInWhichDiscover = (scope != null && !scope.isEmpty()) ? scope : GenericUtils.getCurrentContext(getThreadLocalRequest(), false); + 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){ @@ -92,8 +92,8 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C * Retrieve the list of organizations in which the user can publish (roles ADMIN/EDITOR) * @param username * @return the list of organizations - * @throws GroupRetrievalFault - * @throws UserManagementSystemException + * @throws GroupRetrievalFault + * @throws UserManagementSystemException */ private List getUserOrganizationsListAdmin(String username, String scope) throws UserManagementSystemException, GroupRetrievalFault { @@ -124,11 +124,11 @@ 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; - } + } } /** @@ -136,7 +136,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C * @param chosenLicense * @return */ - private String findLicenseIdByLicense(String chosenLicense) { + private String findLicenseIdByLicense(String chosenLicense) { // get scope from client url String scope = GenericUtils.getScopeFromClientUrl(getThreadLocalRequest()); @@ -259,12 +259,12 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C /** * Discover from the IS the vocabulary of tags for this scope, if present * @return a list of tags vocabulary - * @throws Exception + * @throws Exception */ private List discoverTagsVocabulary(String context){ logger.debug("Looking for vocabulary of tags in this context " + context); - String keyPerVocabulary = CatalogueUtilMethods.concatenateSessionKeyScope(TAGS_VOCABULARY_KEY, context); + String keyPerVocabulary = CatalogueUtilMethods.concatenateSessionKeyScope(TAGS_VOCABULARY_KEY, context); List vocabulary = (List) getThreadLocalRequest().getSession().getAttribute(keyPerVocabulary); if(vocabulary == null){ @@ -323,7 +323,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C String userApiKey = utils.getApiKeyFromUsername(userName); String datasetId = utils.createCKanDatasetMultipleCustomFields - (userApiKey, title, null, organizationNameOrId, author, authorMail, maintainer, + (userApiKey, title, null, organizationNameOrId, author, authorMail, maintainer, maintainerMail, version, description, licenseId, listOfTags, customFields, resources, setPublic); if(datasetId != null){ @@ -343,7 +343,7 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C // start a thread that will associate this dataset with the group if(/*toCreate.getChosenType() != null ||*/ toCreate.getGroups() != null){ - AssociationToGroupAndNotifyThread threadAssociationToGroup = + AssociationToGroupAndNotifyThread threadAssociationToGroup = new AssociationToGroupAndNotifyThread( toCreate.getGroups(), toCreate.getGroupsForceCreation(), @@ -352,8 +352,8 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C datasetId, toCreate.getTitle(), GenericUtils.getCurrentUser(getThreadLocalRequest()).getFullname(), - userName, - utils, + userName, + utils, organizationNameOrId, getThreadLocalRequest() ); @@ -362,14 +362,14 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C } // launch notification thread - WritePostCatalogueManagerThread threadWritePost = + WritePostCatalogueManagerThread threadWritePost = new WritePostCatalogueManagerThread( userName, - scope, - toCreate.getTitle(), - datasetUrl, - false, // send notification to other people - toCreate.getTags(), + scope, + toCreate.getTitle(), + datasetUrl, + false, // send notification to other people + toCreate.getTags(), GenericUtils.getCurrentUser(getThreadLocalRequest()).getFullname(), GenericUtils.getCurrentClientUrl(getThreadLocalRequest()) ); @@ -405,11 +405,11 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C ResourceBean resourceBean = new ResourceBean( - resource.getUrl(), - resource.getName(), - resource.getDescription(), - null, - username, + resource.getUrl(), + resource.getName(), + resource.getDescription(), + null, + username, datasetId, null); @@ -546,17 +546,26 @@ public class CKANPublisherServicesImpl extends RemoteServiceServlet implements C logger.info("Found user's groups in session " + toReturn); }else{ - DataCatalogue catalogue = getCatalogue(scope); - String apiKey = catalogue.getApiKeyFromUsername(username); - Map> mapRoleGroup = catalogue.getUserRoleByGroup(username, apiKey); - 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)); - } + //Fixing Incident #12563 + try{ + DataCatalogue catalogue = getCatalogue(scope); + String apiKey = catalogue.getApiKeyFromUsername(username); + //Fixing Incident #12563 + if(apiKey!=null && !apiKey.isEmpty()){ + Map> mapRoleGroup = catalogue.getUserRoleByGroup(username, apiKey); + 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)); + } + } + 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); } - httpSession.setAttribute(keyPerScopeGroups, toReturn); } }else{ logger.warn("Dev mode detected");