My Organizations page created
git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/gcube-ckan-datacatalog@129654 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
f5fe2d0b1f
commit
b00f2993c4
|
@ -131,8 +131,9 @@ public class CkanEventHandlerManager {
|
||||||
@Override
|
@Override
|
||||||
public void onShowOrganizations(
|
public void onShowOrganizations(
|
||||||
ShowUserOrganizationsEvent showUserDatasetsEvent) {
|
ShowUserOrganizationsEvent showUserDatasetsEvent) {
|
||||||
String request = getCkanRequest("/dashboard/organizations", null);
|
|
||||||
panel.instanceCkanFrame(request);
|
panel.showOrganizations();
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
eventBus.addHandler(
|
eventBus.addHandler(
|
||||||
|
@ -213,9 +214,6 @@ public class CkanEventHandlerManager {
|
||||||
return ckan.buildURI();
|
return ckan.buildURI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static native void logutWindow(String uri, boolean timeout)/*-{
|
private static native void logutWindow(String uri, boolean timeout)/*-{
|
||||||
var newWindow = window.open(uri, '_blank', 'width=50,height=50');
|
var newWindow = window.open(uri, '_blank', 'width=50,height=50');
|
||||||
newWindow.onload = function() {
|
newWindow.onload = function() {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client;
|
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
@ -22,6 +24,12 @@ public interface GcubeCkanDataCatalogService extends RemoteService {
|
||||||
CkanRole getMyRole() throws Exception;
|
CkanRole getMyRole() throws Exception;
|
||||||
|
|
||||||
String getUser();
|
String getUser();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the list of organizations to whom the user belongs and their urls
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<String, String> getCkanOrganizationsNamesAndUrlsForUser();
|
||||||
|
|
||||||
void logoutFromCkan();
|
void logoutFromCkan();
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
*/
|
*/
|
||||||
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client;
|
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
@ -36,4 +38,8 @@ public interface GcubeCkanDataCatalogServiceAsync {
|
||||||
|
|
||||||
void logoutURIFromCkan(AsyncCallback<String> callback);
|
void logoutURIFromCkan(AsyncCallback<String> callback);
|
||||||
|
|
||||||
|
|
||||||
|
void getCkanOrganizationsNamesAndUrlsForUser(
|
||||||
|
AsyncCallback<Map<String, String>> callback);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,7 @@ public class CkanFramePanel extends FlowPanel{
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
add(frame);
|
add(frame);
|
||||||
|
frame.setVisible(true);
|
||||||
eventBus.fireEvent(new IFrameInstanciedEvent());
|
eventBus.fireEvent(new IFrameInstanciedEvent());
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
|
||||||
|
|
||||||
|
import com.github.gwtbootstrap.client.ui.Button;
|
||||||
|
import com.github.gwtbootstrap.client.ui.Paragraph;
|
||||||
|
import com.github.gwtbootstrap.client.ui.base.ListItem;
|
||||||
|
import com.github.gwtbootstrap.client.ui.base.UnorderedList;
|
||||||
|
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
|
||||||
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ckan panel that shows the user organizations
|
||||||
|
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
|
||||||
|
*/
|
||||||
|
public class CkanOrganizationsPanel extends VerticalPanel{
|
||||||
|
|
||||||
|
private Map<String, String> organizations;
|
||||||
|
private GCubeCkanDataCatalogPanel father;
|
||||||
|
|
||||||
|
public CkanOrganizationsPanel(
|
||||||
|
GCubeCkanDataCatalogPanel gCubeCkanDataCatalogPanel) {
|
||||||
|
father = gCubeCkanDataCatalogPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the organizations to show
|
||||||
|
* @param result
|
||||||
|
*/
|
||||||
|
public void setOrganizations(Map<String, String> result) {
|
||||||
|
|
||||||
|
HorizontalPanel hPanel = new HorizontalPanel();
|
||||||
|
hPanel.setStyleName("horizontal-panel-organizations");
|
||||||
|
VerticalPanel vPanel = new VerticalPanel();
|
||||||
|
|
||||||
|
hPanel.add(vPanel);
|
||||||
|
add(hPanel);
|
||||||
|
|
||||||
|
this.organizations = result;
|
||||||
|
|
||||||
|
//generate the list of organizations
|
||||||
|
if(result == null || result.isEmpty()){
|
||||||
|
|
||||||
|
Paragraph p = new Paragraph("You are not a member of any organizations.");
|
||||||
|
p.setStyleName("no-organizations-found-paragraph");
|
||||||
|
p.getElement().getStyle().setColor("#aaaaaa");
|
||||||
|
vPanel.add(p);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
UnorderedList list = new UnorderedList();
|
||||||
|
Iterator<Entry<String, String>> iterator = organizations.entrySet().iterator();
|
||||||
|
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
final Map.Entry<String, String> entry = (Map.Entry<String, String>) iterator
|
||||||
|
.next();
|
||||||
|
|
||||||
|
Button b = new Button();
|
||||||
|
b.setType(ButtonType.LINK);
|
||||||
|
b.setText(entry.getKey());
|
||||||
|
b.addClickHandler(new ClickHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(ClickEvent event) {
|
||||||
|
|
||||||
|
String request = getCkanRequest(entry.getValue(), null);
|
||||||
|
father.instanceCkanFrame(request);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ListItem item = new ListItem(b);
|
||||||
|
list.add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
list.addStyleName("list-panel-organizations-style");
|
||||||
|
vPanel.add(list);
|
||||||
|
}
|
||||||
|
setWidth("100%");
|
||||||
|
setStyleName("my-organizations-container-style");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request the correct url to the ckan connector
|
||||||
|
* @param pathInfo
|
||||||
|
* @param query
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String getCkanRequest(String pathInfo, String query){
|
||||||
|
CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(father.getBaseURLCKANConnector());
|
||||||
|
ckan.addGubeToken(father.getGcubeTokenValueToCKANConnector());
|
||||||
|
pathInfo = CkanConnectorAccessPoint.checkNullString(pathInfo);
|
||||||
|
query = CkanConnectorAccessPoint.checkNullString(query);
|
||||||
|
ckan.addPathInfo(pathInfo);
|
||||||
|
ckan.addQueryString(query);
|
||||||
|
return ckan.buildURI();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,6 +3,8 @@
|
||||||
*/
|
*/
|
||||||
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view;
|
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GCubeCkanDataCatalog;
|
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GCubeCkanDataCatalog;
|
||||||
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources;
|
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources;
|
||||||
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
|
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
|
||||||
|
@ -18,6 +20,7 @@ import com.google.gwt.user.client.ui.Frame;
|
||||||
import com.google.gwt.user.client.ui.Image;
|
import com.google.gwt.user.client.ui.Image;
|
||||||
import com.google.gwt.user.client.ui.RootPanel;
|
import com.google.gwt.user.client.ui.RootPanel;
|
||||||
import com.google.gwt.user.client.ui.ScrollPanel;
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,15 +31,15 @@ import com.google.gwt.user.client.ui.ScrollPanel;
|
||||||
*/
|
*/
|
||||||
public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
|
public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
|
||||||
|
|
||||||
|
|
||||||
private CkanMetadataManagementPanel managementPanel;
|
private CkanMetadataManagementPanel managementPanel;
|
||||||
private ScrollPanel centerScrollable = new ScrollPanel();
|
private ScrollPanel centerScrollable = new ScrollPanel();
|
||||||
private CkanFramePanel ckanFramePanel;
|
private CkanFramePanel ckanFramePanel;
|
||||||
|
private CkanOrganizationsPanel ckanOrganizationsPanel;
|
||||||
private Image loading = new Image(CkanPortletResources.ICONS.loading());
|
private Image loading = new Image(CkanPortletResources.ICONS.loading());
|
||||||
private RootPanel rootPanel;
|
private RootPanel rootPanel;
|
||||||
private HandlerManager eventBus;
|
private HandlerManager eventBus;
|
||||||
private CkanConnectorAccessPoint ckanAccessPoint;
|
private CkanConnectorAccessPoint ckanAccessPoint;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new g cube ckan data catalog panel.
|
* Instantiates a new g cube ckan data catalog panel.
|
||||||
*
|
*
|
||||||
|
@ -48,6 +51,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
|
||||||
this.eventBus = eventManager;
|
this.eventBus = eventManager;
|
||||||
ckanFramePanel = new CkanFramePanel(eventBus);
|
ckanFramePanel = new CkanFramePanel(eventBus);
|
||||||
managementPanel = new CkanMetadataManagementPanel(eventBus);
|
managementPanel = new CkanMetadataManagementPanel(eventBus);
|
||||||
|
ckanOrganizationsPanel = new CkanOrganizationsPanel(this);
|
||||||
initPanel();
|
initPanel();
|
||||||
String pathParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER);
|
String pathParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER);
|
||||||
String queryParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_QUERY_PARAMETER);
|
String queryParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_QUERY_PARAMETER);
|
||||||
|
@ -67,6 +71,21 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
|
||||||
Window.alert("Sorry, An error occurred during contacting Gcube Ckan Data Catalogue!");
|
Window.alert("Sorry, An error occurred during contacting Gcube Ckan Data Catalogue!");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// RETRIEVE USER'S ORGANIZATIONS
|
||||||
|
GCubeCkanDataCatalog.service.getCkanOrganizationsNamesAndUrlsForUser(new AsyncCallback<Map<String,String>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(Map<String, String> result) {
|
||||||
|
|
||||||
|
if(result != null)
|
||||||
|
ckanOrganizationsPanel.setOrganizations(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
//MANAGE CKAN MANAGEMENT PANEL ACCORDING TO MY ROLE
|
//MANAGE CKAN MANAGEMENT PANEL ACCORDING TO MY ROLE
|
||||||
|
@ -157,6 +176,8 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
|
||||||
*/
|
*/
|
||||||
public Frame instanceCkanFrame(String ckanUrlConnector){
|
public Frame instanceCkanFrame(String ckanUrlConnector){
|
||||||
|
|
||||||
|
ckanFramePanel.setVisible(true);
|
||||||
|
ckanOrganizationsPanel.setVisible(false);
|
||||||
return ckanFramePanel.instanceFrame(ckanUrlConnector);
|
return ckanFramePanel.instanceFrame(ckanUrlConnector);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -167,7 +188,12 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
|
||||||
private void initPanel() {
|
private void initPanel() {
|
||||||
setTopPanelVisible(false);
|
setTopPanelVisible(false);
|
||||||
addToTop(managementPanel);
|
addToTop(managementPanel);
|
||||||
centerScrollable.add(ckanFramePanel);
|
VerticalPanel containerIntoScrollPanel = new VerticalPanel();
|
||||||
|
containerIntoScrollPanel.setWidth("100%");
|
||||||
|
containerIntoScrollPanel.add(ckanFramePanel);
|
||||||
|
containerIntoScrollPanel.add(ckanOrganizationsPanel);
|
||||||
|
centerScrollable.add(containerIntoScrollPanel);
|
||||||
|
ckanOrganizationsPanel.setVisible(false);
|
||||||
addToMiddle(centerScrollable);
|
addToMiddle(centerScrollable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,4 +251,13 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
|
||||||
return ckanAccessPoint.getPathInfoParameter();
|
return ckanAccessPoint.getPathInfoParameter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the organizations panel
|
||||||
|
*/
|
||||||
|
public void showOrganizations() {
|
||||||
|
|
||||||
|
ckanOrganizationsPanel.setVisible(true);
|
||||||
|
ckanFramePanel.setVisible(false);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import java.io.InputStream;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
||||||
|
|
||||||
|
import eu.trentorise.opendata.jackan.model.CkanOrganization;
|
||||||
import eu.trentorise.opendata.traceprov.internal.org.apache.commons.io.IOUtils;
|
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.
|
||||||
|
@ -465,6 +467,42 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> getCkanOrganizationsNamesAndUrlsForUser() {
|
||||||
|
|
||||||
|
HttpSession httpSession = this.getThreadLocalRequest().getSession();
|
||||||
|
ASLSession session = getASLSession(httpSession);
|
||||||
|
String username = session.getUsername();
|
||||||
|
|
||||||
|
Map<String, String> toReturn = new HashMap<>();
|
||||||
|
|
||||||
|
if(!SessionUtil.isIntoPortal()){
|
||||||
|
|
||||||
|
logger.warn("You are not into the portal");
|
||||||
|
// toReturn.put("testVRE", "random");
|
||||||
|
// toReturn.put("testVRE2", "random");
|
||||||
|
// toReturn.put("testVRE3", "random");
|
||||||
|
// toReturn.put("testVRE4", "random");
|
||||||
|
// toReturn.put("testVRE5", "random");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(username.equals(TEST_USER))
|
||||||
|
return toReturn;
|
||||||
|
else{
|
||||||
|
|
||||||
|
List<CkanOrganization> organizations = instance.getOrganizationsByUser(username);
|
||||||
|
|
||||||
|
for (CkanOrganization ckanOrganization : organizations) {
|
||||||
|
toReturn.put(ckanOrganization.getTitle(), "/organization/" + ckanOrganization.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("List of organizations to return for user " + username + " is " + toReturn);
|
||||||
|
}
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
|
|
@ -49,4 +49,49 @@ h1 {
|
||||||
|
|
||||||
.modal {
|
.modal {
|
||||||
top: 2% !important;
|
top: 2% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** My Organizations panel **/
|
||||||
|
.my-organizations-container-style {
|
||||||
|
background-repeat: repeat !important;
|
||||||
|
background-attachment: scroll !important;
|
||||||
|
background-position: 0% 0% !important;
|
||||||
|
background-clip: border-box !important;
|
||||||
|
background-origin: padding-box !important;
|
||||||
|
background-size: auto auto !important;
|
||||||
|
width: 100% !important;
|
||||||
|
height: 100% !important;
|
||||||
|
background: #eeeeee
|
||||||
|
url("https://ckan-d-d4s.d4science.org/base/images/bg.png") !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.horizontal-panel-organizations {
|
||||||
|
margin-right: auto !important;
|
||||||
|
margin-left: auto !important;
|
||||||
|
background-color: white !important;
|
||||||
|
width: 70% !important;
|
||||||
|
margin-top: 2% !important;
|
||||||
|
margin-bottom: 10% ! important;
|
||||||
|
zoom: 1 !important;
|
||||||
|
background-color: #FFF !important;
|
||||||
|
border: 1px solid #cccccc !important;
|
||||||
|
-webkit-border-radius: 4px !important;
|
||||||
|
-moz-border-radius: 4px !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
-webkit-box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.05) !important;
|
||||||
|
-moz-box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.05) !important;
|
||||||
|
box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.05) !important;
|
||||||
|
position: relative !important;
|
||||||
|
background-color: #fff !important;
|
||||||
|
padding-left: 5% !important !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-panel-organizations-style {
|
||||||
|
padding: 30px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-organizations-found-paragraph {
|
||||||
|
padding: 30px !important;
|
||||||
|
color: #aaaaaa !important;
|
||||||
|
font-style: italic !important;
|
||||||
}
|
}
|
Loading…
Reference in New Issue