Several fixes due to changed ckan utils library

Added support for multiselection in metadata listboxes

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/gcube-ckan-datacatalog@131118 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Costantino Perciante 2016-09-05 16:18:57 +00:00
parent 69fd3467c1
commit 1822ee8c06
7 changed files with 145 additions and 134 deletions

View File

@ -4,6 +4,9 @@
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<dependent-module archiveName="ckan-util-library-1.1.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/ckan-util-library/ckan-util-library">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="context-root" value="gcube-ckan-datacatalog"/> <property name="context-root" value="gcube-ckan-datacatalog"/>
<property name="java-output-path" value="/gcube-ckan-datacatalog/target/gcube-ckan-datacatalog-1.0.0-SNAPSHOT/WEB-INF/classes"/> <property name="java-output-path" value="/gcube-ckan-datacatalog/target/gcube-ckan-datacatalog-1.0.0-SNAPSHOT/WEB-INF/classes"/>
</wb-module> </wb-module>

View File

@ -71,107 +71,107 @@ public class CkanEventHandlerManager {
// bind on insert metadata // bind on insert metadata
eventBus.addHandler(InsertMetadataEvent.TYPE, new InsertMetadataEventHandler() { eventBus.addHandler(InsertMetadataEvent.TYPE, new InsertMetadataEventHandler() {
@Override @Override
public void onInsertMetadata( public void onInsertMetadata(
InsertMetadataEvent loadSelecteReleaseEvent) { InsertMetadataEvent loadSelecteReleaseEvent) {
final Modal modal = new Modal(true, true); final Modal modal = new Modal(true, true);
// request who's doing the insert // request who's doing the insert
GCubeCkanDataCatalog.service.getUser(new AsyncCallback<String>() { GCubeCkanDataCatalog.service.getUser(new AsyncCallback<String>() {
@Override @Override
public void onSuccess(String username) { public void onSuccess(String username) {
if (username != null) { if (username != null) {
modal.setTitle("Publish Product"); modal.setTitle("Publish Product");
modal.addStyleName("insert-metadata-modal-style"); modal.addStyleName("insert-metadata-modal-style");
modal.add(new CreateDatasetForm(username, eventBus)); modal.add(new CreateDatasetForm(username, eventBus));
modal.setCloseVisible(true); modal.setCloseVisible(true);
modal.show(); modal.show();
// hide any popup panel opened // hide any popup panel opened
modal.addHideHandler(new HideHandler() { modal.addHideHandler(new HideHandler() {
@Override @Override
public void onHide(HideEvent hideEvent) { public void onHide(HideEvent hideEvent) {
eventBus.fireEvent(new CloseCreationFormEvent()); eventBus.fireEvent(new CloseCreationFormEvent());
} }
}); });
}
else
Window.alert("Please, logout and login again then retry.");
} }
else
@Override
public void onFailure(Throwable caught) {
Window.alert("Please, logout and login again then retry."); Window.alert("Please, logout and login again then retry.");
} }
});
} @Override
}); public void onFailure(Throwable caught) {
Window.alert("Please, logout and login again then retry.");
}
});
}
});
// bind on edit (TODO) // bind on edit (TODO)
eventBus.addHandler( eventBus.addHandler(
EditMetadataEvent.TYPE, new EditMetadataEventHandler() { EditMetadataEvent.TYPE, new EditMetadataEventHandler() {
@Override @Override
public void onEditMetadata(EditMetadataEvent editMetadataEvent) { public void onEditMetadata(EditMetadataEvent editMetadataEvent) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
}); });
// show datasets event // show datasets event
eventBus.addHandler( eventBus.addHandler(
ShowUserDatasetsEvent.TYPE, new ShowUserDatasetsEventHandler() { ShowUserDatasetsEvent.TYPE, new ShowUserDatasetsEventHandler() {
@Override @Override
public void onShowDatasets( public void onShowDatasets(
ShowUserDatasetsEvent showUserDatasetsEvent) { ShowUserDatasetsEvent showUserDatasetsEvent) {
String request = getCkanRequest("/dashboard/datasets", null); String request = getCkanRequest("/dashboard/datasets", null);
panel.instanceCkanFrame(request); panel.instanceCkanFrame(request);
} }
}); });
eventBus.addHandler( eventBus.addHandler(
ShowUserOrganizationsEvent.TYPE, ShowUserOrganizationsEvent.TYPE,
new ShowUserOrganizationsEventHandler() { new ShowUserOrganizationsEventHandler() {
@Override @Override
public void onShowOrganizations( public void onShowOrganizations(
ShowUserOrganizationsEvent showUserDatasetsEvent) { ShowUserOrganizationsEvent showUserDatasetsEvent) {
panel.showOrganizations(); panel.showOrganizations();
} }
}); });
eventBus.addHandler( eventBus.addHandler(
ShowUserGroupsEvent.TYPE, new ShowUserGroupsEventHandler() { ShowUserGroupsEvent.TYPE, new ShowUserGroupsEventHandler() {
@Override @Override
public void onShowGroups(ShowUserGroupsEvent showUserDatasetsEvent) { public void onShowGroups(ShowUserGroupsEvent showUserDatasetsEvent) {
String request = getCkanRequest("/dashboard/groups", null); String request = getCkanRequest("/dashboard/groups", null);
panel.instanceCkanFrame(request); panel.instanceCkanFrame(request);
} }
}); });
// show statistics event // show statistics event
eventBus.addHandler( eventBus.addHandler(
ShowStatisticsEvent.TYPE, new ShowStatisticsEventHandler() { ShowStatisticsEvent.TYPE, new ShowStatisticsEventHandler() {
@Override @Override
public void onShowStatistics( public void onShowStatistics(
ShowStatisticsEvent showStatisticsEvent) { ShowStatisticsEvent showStatisticsEvent) {
String request = getCkanRequest("/stats", null); String request = getCkanRequest("/stats", null);
panel.instanceCkanFrame(request); panel.instanceCkanFrame(request);
} }
}); });
eventBus.addHandler(NotifyLogoutEvent.TYPE, new NotifyLogoutEventHandler() { eventBus.addHandler(NotifyLogoutEvent.TYPE, new NotifyLogoutEventHandler() {
@Override @Override
public void onLogout(NotifyLogoutEvent editMetadataEvent) { public void onLogout(NotifyLogoutEvent editMetadataEvent) {
// CKanLeaveFrame frame = new CKanLeaveFrame(GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE); // CKanLeaveFrame frame = new CKanLeaveFrame(GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE);
// DOM.appendChild(RootPanel.getBodyElement(), frame.getElement()); // DOM.appendChild(RootPanel.getBodyElement(), frame.getElement());
} }
}); });

View File

@ -19,7 +19,7 @@ public interface GcubeCkanDataCatalogService extends RemoteService {
CkanConnectorAccessPoint getCKanConnector( CkanConnectorAccessPoint getCKanConnector(
String pathInfoParameters, String queryStringParameters) throws Exception; String pathInfoParameters, String queryStringParameters, String currentUrl) throws Exception;
CkanRole getMyRole() throws Exception; CkanRole getMyRole() throws Exception;

View File

@ -19,30 +19,21 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
*/ */
public interface GcubeCkanDataCatalogServiceAsync { public interface GcubeCkanDataCatalogServiceAsync {
void getMyRole(AsyncCallback<CkanRole> callback); void getMyRole(AsyncCallback<CkanRole> callback);
void getUser(AsyncCallback<String> callback); void getUser(AsyncCallback<String> callback);
void getCKanConnector( void getCKanConnector(
String pathInfoParameters, String queryStringParameters, String pathInfoParameters, String queryStringParameters, String currentUrl,
AsyncCallback<CkanConnectorAccessPoint> callback); AsyncCallback<CkanConnectorAccessPoint> callback);
/**
*
*/
void logoutFromCkan(AsyncCallback<Void> callback); void logoutFromCkan(AsyncCallback<Void> callback);
void logoutURIFromCkan(AsyncCallback<String> callback); void logoutURIFromCkan(AsyncCallback<String> callback);
void getCkanOrganizationsNamesAndUrlsForUser( void getCkanOrganizationsNamesAndUrlsForUser(
AsyncCallback<Map<String, String>> callback); AsyncCallback<Map<String, String>> callback);
void outsidePortal(AsyncCallback<Boolean> callback); void outsidePortal(AsyncCallback<Boolean> callback);
} }

View File

@ -14,7 +14,7 @@ public class CKanLeaveFrame extends Frame{
try{ try{
// GCubeCkanDataCatalogPanel.print("Instancing new IFRAME with uri: "+ url); // GCubeCkanDataCatalogPanel.print("Instancing new IFRAME with uri: "+ url);
getElement().setId("i-frame-logout"); getElement().setId("i-frame-logout");
// make it smaller // make it smaller

View File

@ -65,7 +65,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
Window.Location.getParameter(GCubeCkanDataCatalog.GET_QUERY_PARAMETER); Window.Location.getParameter(GCubeCkanDataCatalog.GET_QUERY_PARAMETER);
GCubeCkanDataCatalog.service.getCKanConnector( GCubeCkanDataCatalog.service.getCKanConnector(
pathParameter, queryParameter, pathParameter, queryParameter, Window.Location.getHref(),
new AsyncCallback<CkanConnectorAccessPoint>() { new AsyncCallback<CkanConnectorAccessPoint>() {
@Override @Override
@ -138,9 +138,6 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
// the portlet is outside the portal and no user is logged in
// show only home and statistics
managementPanel.doNotShowUserRelatedInfo(); managementPanel.doNotShowUserRelatedInfo();
} }
}); });

View File

@ -21,13 +21,15 @@ import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.core.session.SessionManager; import org.gcube.application.framework.core.session.SessionManager;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.datacatalogue.ckanutillibrary.CKanUtils; import org.gcube.datacatalogue.ckanutillibrary.CKanUtils;
import org.gcube.datacatalogue.ckanutillibrary.CKanUtilsImpl;
import org.gcube.datacatalogue.ckanutillibrary.CkanUtilsFactory; import org.gcube.datacatalogue.ckanutillibrary.CkanUtilsFactory;
import org.gcube.datacatalogue.ckanutillibrary.utils.ApplicationProfileScopePerUrlReader;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole;
import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.OrganizationBean; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.OrganizationBean;
import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -39,6 +41,7 @@ import eu.trentorise.opendata.traceprov.internal.org.apache.commons.io.IOUtils;
* The server side implementation of the RPC service. * The server side implementation of the RPC service.
* *
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* @author Costantino Perciante costantino.perciante@isti.cnr.it
* Jun 10, 2016 * Jun 10, 2016
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
@ -65,6 +68,9 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
private static final String CKAN_HIGHEST_ROLE = "ckanHighestRole"; // editor, member, admin (this information is retrieved according the scope) private static final String CKAN_HIGHEST_ROLE = "ckanHighestRole"; // editor, member, admin (this information is retrieved according the scope)
private static final String CKAN_ORGANIZATIONS_PUBLISH_KEY = "ckanOrganizationsPublish"; // here he can publish (admin role) private static final String CKAN_ORGANIZATIONS_PUBLISH_KEY = "ckanOrganizationsPublish"; // here he can publish (admin role)
// THIS IS NEEDED TO HANDLE SPECIAL CASES (e.g. for a certain portlet url we want to discover in another scope)
private final static String CLIENT_PORTLET_URL = "currentClientUrlPortlet";
/** /**
* Instanciate the ckan util library. * Instanciate the ckan util library.
* Since it needs the scope, we need to check if it is null or not * Since it needs the scope, we need to check if it is null or not
@ -80,16 +86,9 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
CKanUtils instance = null; CKanUtils instance = null;
try{ try{
if(user.equals(TEST_USER)){ String scopeInWhichDiscover = (discoverScope != null && !discoverScope.isEmpty()) ? discoverScope : currentScope;
// session expired or, maybe, outside the portal logger.debug("Discovering ckan utils library into scope " + scopeInWhichDiscover);
logger.warn("User is "+TEST_USER +" are we out from portal?"); instance = CkanUtilsFactory.getFactory().getUtilsPerScope(scopeInWhichDiscover);
logger.warn("I'm using root scope "+ CKanUtilsImpl.PRODUCTION_SCOPE_ROOT);
instance = CkanUtilsFactory.getFactory().getUtilsPerScope(CKanUtilsImpl.PRODUCTION_SCOPE_ROOT);
}else{
String scopeInWhichDiscover = (discoverScope != null && !discoverScope.isEmpty()) ? discoverScope : currentScope;
logger.debug("Discovering ckan utils library into scope " + scopeInWhichDiscover);
instance = CkanUtilsFactory.getFactory().getUtilsPerScope(scopeInWhichDiscover);
}
}catch(Exception e){ }catch(Exception e){
logger.error("Unable to retrieve ckan utils", e); logger.error("Unable to retrieve ckan utils", e);
} }
@ -100,23 +99,30 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
* @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#getCKanConnector(java.lang.String, java.lang.String) * @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#getCKanConnector(java.lang.String, java.lang.String)
*/ */
@Override @Override
public CkanConnectorAccessPoint getCKanConnector(String pathInfoParameter, String queryStringParameters) throws Exception { public CkanConnectorAccessPoint getCKanConnector(String pathInfoParameter, String queryStringParameters, String currentUrl) throws Exception {
logger.info("getCKanConnector [pathInfo: "+pathInfoParameter + ", query: "+queryStringParameters+"]"); logger.info("getCKanConnector [pathInfo: "+pathInfoParameter + ", query: "+queryStringParameters+"], current url is " + currentUrl);
try{ try{
// call asl session otherwise ScopeProvider.instance.get(); returns null
ASLSession aslSession = getASLSession(this.getThreadLocalRequest().getSession());
// retrieve scope per current portlet url
String scopePerCurrentUrl = new ApplicationProfileScopePerUrlReader().getScopePerUrl(currentUrl);
// save it
this.getThreadLocalRequest().getSession().setAttribute(CLIENT_PORTLET_URL, currentUrl);
if(queryStringParameters!=null && Base64.isBase64(queryStringParameters.getBytes())){ if(queryStringParameters!=null && Base64.isBase64(queryStringParameters.getBytes())){
byte[] valueDecoded=Base64.decodeBase64(queryStringParameters.getBytes()); byte[] valueDecoded=Base64.decodeBase64(queryStringParameters.getBytes());
queryStringParameters = new String(valueDecoded); queryStringParameters = new String(valueDecoded);
logger.info("queryStringParameters detected like Base64 and decoded like: "+queryStringParameters); logger.info("queryStringParameters detected like Base64 and decoded like: "+queryStringParameters);
} }
CkanConnectorAccessPoint ckAP = getCkanConnectorAccessPoint(pathInfoParameter, queryStringParameters); CkanConnectorAccessPoint ckAP = getCkanConnectorAccessPoint(pathInfoParameter, queryStringParameters, scopePerCurrentUrl);
ASLSession aslSession = getASLSession(this.getThreadLocalRequest().getSession()); SessionUtil.saveCkanAccessPoint(this.getThreadLocalRequest().getSession(), scopePerCurrentUrl, ckAP);
SessionUtil.saveCkanAccessPoint(this.getThreadLocalRequest().getSession(), aslSession.getScope(), ckAP);
logger.info("Builded URI to CKAN Connector: "+ckAP.buildURI()); logger.info("Builded URI to CKAN Connector: "+ckAP.buildURI());
logger.debug("returning ckanConnectorUri: "+ckAP); logger.debug("returning ckanConnectorUri: "+ckAP);
return ckAP; return ckAP;
// return "http://ckan-d-d4s.d4science.org";
}catch(Exception e ){ }catch(Exception e ){
String message = "Sorry an error occurred during contacting gCube Ckan Data Catalogue"; String message = "Sorry an error occurred during contacting gCube Ckan Data Catalogue";
logger.error(message, e); logger.error(message, e);
@ -133,10 +139,10 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
* @return the ckan connector access point * @return the ckan connector access point
* @throws Exception * @throws Exception
*/ */
private CkanConnectorAccessPoint getCkanConnectorAccessPoint(String pathInfoParameter, String queryStringParameters) throws Exception { private CkanConnectorAccessPoint getCkanConnectorAccessPoint(String pathInfoParameter, String queryStringParameters, String scopePerCurrentUrl) throws Exception {
if(outsidePortal()){ if(outsidePortal()){
CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(getCkanUtilsObj(null).getCatalogueUrl(),""); CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(getCkanUtilsObj(scopePerCurrentUrl).getCatalogueUrl(),"");
return ckan; return ckan;
} }
@ -144,7 +150,7 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession()); ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
GcoreEndpointReader ckanEndPoint = null; GcoreEndpointReader ckanEndPoint = null;
try{ try{
ckanEndPoint = SessionUtil.getCkanEndPoint(this.getThreadLocalRequest().getSession(), session.getScope()); ckanEndPoint = SessionUtil.getCkanEndPoint(this.getThreadLocalRequest().getSession(), scopePerCurrentUrl);
}catch(Exception e){ }catch(Exception e){
logger.error("CkanConnectorAccessPoint error: "+e.getMessage()); logger.error("CkanConnectorAccessPoint error: "+e.getMessage());
throw new Exception("Sorry, an error occurred during contacting d4Science Data Catalogue, try again later"); throw new Exception("Sorry, an error occurred during contacting d4Science Data Catalogue, try again later");
@ -154,7 +160,6 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
ckanConnectorBaseUrl = ckanConnectorBaseUrl.contains(PORT_HTTP)?ckanConnectorBaseUrl.replace(PORT_HTTP, PORT_HTTPS):ckanConnectorBaseUrl; ckanConnectorBaseUrl = ckanConnectorBaseUrl.contains(PORT_HTTP)?ckanConnectorBaseUrl.replace(PORT_HTTP, PORT_HTTPS):ckanConnectorBaseUrl;
logger.debug("Base URL is: "+ckanConnectorBaseUrl); logger.debug("Base URL is: "+ckanConnectorBaseUrl);
//GET CONTEXT //GET CONTEXT
String ckanContext = getServletContext().getInitParameter(CKANCONNECTORCONTEXT); String ckanContext = getServletContext().getInitParameter(CKANCONNECTORCONTEXT);
logger.debug(CKANCONNECTORCONTEXT + " is: "+ckanContext); logger.debug(CKANCONNECTORCONTEXT + " is: "+ckanContext);
@ -241,17 +246,16 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
String user = (String) httpSession.getAttribute(USERNAME_ATTRIBUTE); String user = (String) httpSession.getAttribute(USERNAME_ATTRIBUTE);
if (user == null) { if (user == null) {
logger.warn("****** STARTING IN TEST MODE - NO USER FOUND *******"); logger.warn("****** STARTING IN TEST MODE - NO USER FOUND *******");
//for test only //for test only
user = TEST_USER; user = TEST_USER;
httpSession.setAttribute(USERNAME_ATTRIBUTE, user); httpSession.setAttribute(USERNAME_ATTRIBUTE, user);
ASLSession session = SessionManager.getInstance().getASLSession(sessionID, user); ASLSession session = SessionManager.getInstance().getASLSession(sessionID, user);
session.setScope(TEST_SCOPE); session.setScope(TEST_SCOPE);
//session.setUserEmailAddress(TEST_MAIL);
return session; return session;
} else logger.trace("user found in session "+user); }
else
logger.trace("user found in session "+user);
return SessionManager.getInstance().getASLSession(sessionID, user); return SessionManager.getInstance().getASLSession(sessionID, user);
} }
@ -272,12 +276,7 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
HttpSession httpSession = this.getThreadLocalRequest().getSession(); HttpSession httpSession = this.getThreadLocalRequest().getSession();
ASLSession session = getASLSession(httpSession); ASLSession session = getASLSession(httpSession);
String currentScope = session.getScope();
String username = session.getUsername(); String username = session.getUsername();
String groupName = session.getGroupName(); // e.g. devVRE
// get key per scope
String keyPerScope = UserUtil.concatenateSessionKeyScope(CKAN_HIGHEST_ROLE, session.getScope());
// check if session expired // check if session expired
if(username.equals(TEST_USER)){ if(username.equals(TEST_USER)){
@ -285,6 +284,16 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
logger.warn("Session expired, returning " + toReturn); logger.warn("Session expired, returning " + toReturn);
}else{ }else{
// save it
String currentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(CLIENT_PORTLET_URL);
// retrieve scope per current portlet url
String scopePerCurrentUrl = new ApplicationProfileScopePerUrlReader().getScopePerUrl(currentUrl);
// get key per scope
String keyPerScope = UserUtil.concatenateSessionKeyScope(CKAN_HIGHEST_ROLE, scopePerCurrentUrl);
// check into session // check into session
if(httpSession.getAttribute(keyPerScope) != null){ if(httpSession.getAttribute(keyPerScope) != null){
@ -293,18 +302,25 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
}else{ }else{
// we build up also a list that keeps track of the scopes (orgs) in which the user has role ADMIN try{
List<OrganizationBean> orgsInWhichAdminRole = new ArrayList<OrganizationBean>(); GroupManager gm = new LiferayGroupManager();
toReturn = UserUtil.getHighestRole(currentScope, username, groupName, this, orgsInWhichAdminRole); String groupName = gm.getGroup(gm.getGroupIdFromInfrastructureScope(scopePerCurrentUrl)).getGroupName();
httpSession.setAttribute(keyPerScope, toReturn);
logger.info("Set role " + toReturn + " into session for user " + username); // we build up also a list that keeps track of the scopes (orgs) in which the user has role ADMIN
List<OrganizationBean> orgsInWhichAdminRole = new ArrayList<OrganizationBean>();
toReturn = UserUtil.getHighestRole(scopePerCurrentUrl, username, groupName, this, orgsInWhichAdminRole);
httpSession.setAttribute(keyPerScope, toReturn);
// if he is an admin preload: logger.info("Set role " + toReturn + " into session for user " + username);
// 1) organizations in which he can publish (the widget will find these info in session)
if(toReturn.equals(CkanRole.ADMIN)){ // if he is an admin preload:
httpSession.setAttribute(UserUtil.concatenateSessionKeyScope(CKAN_ORGANIZATIONS_PUBLISH_KEY, currentScope), orgsInWhichAdminRole); // 1) organizations in which he can publish (the widget will find these info in session)
logger.info("Set organizations in which he can publish to " + orgsInWhichAdminRole + " into session for user " + username); if(toReturn.equals(CkanRole.ADMIN)){
httpSession.setAttribute(UserUtil.concatenateSessionKeyScope(CKAN_ORGANIZATIONS_PUBLISH_KEY, scopePerCurrentUrl), orgsInWhichAdminRole);
logger.info("Set organizations in which he can publish to " + orgsInWhichAdminRole + " into session for user " + username);
}
}catch(Exception e){
logger.error("Error while retreving roles... returning MEMBER", e);
} }
} }
} }
@ -412,8 +428,6 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
@Override @Override
public Map<String, String> getCkanOrganizationsNamesAndUrlsForUser() { public Map<String, String> getCkanOrganizationsNamesAndUrlsForUser() {
// TODO generate this list dynamically taking into account the current scope
Map<String, String> toReturn = new HashMap<>(); Map<String, String> toReturn = new HashMap<>();
if(!SessionUtil.isIntoPortal()){ if(!SessionUtil.isIntoPortal()){
@ -427,7 +441,13 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
ASLSession session = getASLSession(httpSession); ASLSession session = getASLSession(httpSession);
String username = session.getUsername(); String username = session.getUsername();
String keyPerScope = UserUtil.concatenateSessionKeyScope(CKAN_ORGS_USER_KEY, session.getScope()); // get it
String currentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(CLIENT_PORTLET_URL);
// retrieve scope per current portlet url
String scopePerCurrentUrl = new ApplicationProfileScopePerUrlReader().getScopePerUrl(currentUrl);
String keyPerScope = UserUtil.concatenateSessionKeyScope(CKAN_ORGS_USER_KEY, scopePerCurrentUrl);
if(!username.equals(TEST_USER)){ if(!username.equals(TEST_USER)){
@ -437,7 +457,7 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
logger.debug("List of organizations was into the session " + toReturn); logger.debug("List of organizations was into the session " + toReturn);
}else{ }else{
logger.debug("Organizations list wasn't into session, retrieving them"); logger.debug("Organizations list wasn't into session, retrieving them");
List<CkanOrganization> organizations = getCkanUtilsObj(null).getOrganizationsByUser(username); List<CkanOrganization> organizations = getCkanUtilsObj(scopePerCurrentUrl).getOrganizationsByUser(username);
for (CkanOrganization ckanOrganization : organizations) { for (CkanOrganization ckanOrganization : organizations) {
toReturn.put(ckanOrganization.getTitle(), "/organization/" + ckanOrganization.getName()); toReturn.put(ckanOrganization.getTitle(), "/organization/" + ckanOrganization.getName());
} }