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:
Costantino Perciante 2016-06-29 14:50:18 +00:00
parent f5fe2d0b1f
commit b00f2993c4
8 changed files with 245 additions and 8 deletions

View File

@ -131,8 +131,9 @@ public class CkanEventHandlerManager {
@Override
public void onShowOrganizations(
ShowUserOrganizationsEvent showUserDatasetsEvent) {
String request = getCkanRequest("/dashboard/organizations", null);
panel.instanceCkanFrame(request);
panel.showOrganizations();
}
});
eventBus.addHandler(
@ -213,9 +214,6 @@ public class CkanEventHandlerManager {
return ckan.buildURI();
}
private static native void logutWindow(String uri, boolean timeout)/*-{
var newWindow = window.open(uri, '_blank', 'width=50,height=50');
newWindow.onload = function() {

View File

@ -1,5 +1,7 @@
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.CkanRole;
@ -22,6 +24,12 @@ public interface GcubeCkanDataCatalogService extends RemoteService {
CkanRole getMyRole() throws Exception;
String getUser();
/**
* Retrieve the list of organizations to whom the user belongs and their urls
* @return
*/
Map<String, String> getCkanOrganizationsNamesAndUrlsForUser();
void logoutFromCkan();

View File

@ -3,6 +3,8 @@
*/
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.CkanRole;
@ -36,4 +38,8 @@ public interface GcubeCkanDataCatalogServiceAsync {
void logoutURIFromCkan(AsyncCallback<String> callback);
void getCkanOrganizationsNamesAndUrlsForUser(
AsyncCallback<Map<String, String>> callback);
}

View File

@ -82,6 +82,7 @@ public class CkanFramePanel extends FlowPanel{
}
});
add(frame);
frame.setVisible(true);
eventBus.fireEvent(new IFrameInstanciedEvent());
return frame;
}

View File

@ -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();
}
}

View File

@ -3,6 +3,8 @@
*/
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.resource.CkanPortletResources;
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.RootPanel;
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{
private CkanMetadataManagementPanel managementPanel;
private ScrollPanel centerScrollable = new ScrollPanel();
private CkanFramePanel ckanFramePanel;
private CkanOrganizationsPanel ckanOrganizationsPanel;
private Image loading = new Image(CkanPortletResources.ICONS.loading());
private RootPanel rootPanel;
private HandlerManager eventBus;
private CkanConnectorAccessPoint ckanAccessPoint;
/**
* Instantiates a new g cube ckan data catalog panel.
*
@ -48,6 +51,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
this.eventBus = eventManager;
ckanFramePanel = new CkanFramePanel(eventBus);
managementPanel = new CkanMetadataManagementPanel(eventBus);
ckanOrganizationsPanel = new CkanOrganizationsPanel(this);
initPanel();
String pathParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_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!");
}
});
// 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
@ -157,6 +176,8 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
*/
public Frame instanceCkanFrame(String ckanUrlConnector){
ckanFramePanel.setVisible(true);
ckanOrganizationsPanel.setVisible(false);
return ckanFramePanel.instanceFrame(ckanUrlConnector);
}
@ -167,7 +188,12 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
private void initPanel() {
setTopPanelVisible(false);
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);
}
@ -225,4 +251,13 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{
return ckanAccessPoint.getPathInfoParameter();
}
/**
* Show the organizations panel
*/
public void showOrganizations() {
ckanOrganizationsPanel.setVisible(true);
ckanFramePanel.setVisible(false);
}
}

View File

@ -7,6 +7,7 @@ import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -38,6 +39,7 @@ import org.slf4j.LoggerFactory;
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;
/**
* 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) {

View File

@ -49,4 +49,49 @@ h1 {
.modal {
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;
}