diff --git a/src/main/java/org/gcube/portlets/user/joinvre/client/panels/JoinVREPanel.java b/src/main/java/org/gcube/portlets/user/joinvre/client/panels/JoinVREPanel.java index 5af8839..3b5a63d 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/client/panels/JoinVREPanel.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/client/panels/JoinVREPanel.java @@ -1,6 +1,7 @@ package org.gcube.portlets.user.joinvre.client.panels; import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -12,11 +13,14 @@ import org.gcube.portlets.user.joinvre.shared.VRE; import com.google.gwt.core.client.GWT; 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.Grid; import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HasAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; /** @@ -49,15 +53,28 @@ public class JoinVREPanel extends Composite { if (vres == null || vres.isEmpty()) { mainPanel.add(new HTML("
Ops, something went wrong. Please reload this page.
")); } else { - Grid grid = new Grid(vres.size()/4+1, 4); - mainPanel.add(grid); - - for (int i = 0; i < vres.size(); i++) { - grid.setWidget(i/4, i%4, new DisplayVRE(vres.get(i))); + + int panelSize = vres.get(vres.size()-1).getRelevance(); + FlowPanel[] panels = new FlowPanel[panelSize]; + int last = -1; + for (VRE vre : vres) { + int relevance = vre.getRelevance(); + if(last < relevance){ + panels[relevance] = new FlowPanel(); + Label label = new Label(Relevance.values()[relevance].name().replace('_', ' ')); + label.addStyleName("relevance"); + if(relevance == 0){ + label.addStyleName("first"); + } + panels[relevance].add(label); + mainPanel.add(panels[relevance]); + last = relevance; + } + panels[relevance].add(new DisplayVRE(vre)); } + } - } @Override @@ -67,6 +84,7 @@ public class JoinVREPanel extends Composite { "Please check your connection and try refresh this page.")); } + }); initWidget(mainPanel); } diff --git a/src/main/java/org/gcube/portlets/user/joinvre/client/panels/Relevance.java b/src/main/java/org/gcube/portlets/user/joinvre/client/panels/Relevance.java new file mode 100644 index 0000000..0579ee0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/joinvre/client/panels/Relevance.java @@ -0,0 +1,12 @@ +/** + * + */ +package org.gcube.portlets.user.joinvre.client.panels; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public enum Relevance { + Must_Have, Recommended, New +} diff --git a/src/main/java/org/gcube/portlets/user/joinvre/client/ui/DisplayVRE.java b/src/main/java/org/gcube/portlets/user/joinvre/client/ui/DisplayVRE.java index 0032301..6847f25 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/client/ui/DisplayVRE.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/client/ui/DisplayVRE.java @@ -5,6 +5,7 @@ import java.util.List; import org.gcube.portlets.user.joinvre.client.JoinService; import org.gcube.portlets.user.joinvre.client.JoinServiceAsync; import org.gcube.portlets.user.joinvre.shared.VRE; +import org.gcube.portlets.user.joinvre.shared.VRECategory; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -76,9 +77,9 @@ public class DisplayVRE extends Composite { vreName.setText(name); vreName.addClickHandler(descriptionHandler); - List categories = vre.getCategories(); + List categories = vre.getCategories(); for(int i=0; i devsecCategories = new ArrayList(); - devsecCategories.add("Development"); - vres.add(new VRE(0, "devsec", "devsec VRE description", "", "", "/group/devsec", devsecCategories, UserBelonging.NOT_BELONGING, false)); - List devVRECategories = new ArrayList(devsecCategories); - devVRECategories.add("Sailing"); - vres.add(new VRE(1, "devVRE", "devVRE VRE description", "", "", "/group/devVRE", devVRECategories, UserBelonging.NOT_BELONGING, false)); - List devmodeategories = new ArrayList(devsecCategories); - devmodeategories.add("Climbing"); - vres.add(new VRE(2, "devmode", "devmode VRE description", "", "", "/group/devmode", devmodeategories, UserBelonging.NOT_BELONGING, true)); - vres.add(new VRE(3, "devsec", "devsec VRE description", "", "", "/group/devsec", devsecCategories, UserBelonging.NOT_BELONGING, false)); - vres.add(new VRE(4, "devsec", "devsec VRE description", "", "", "/group/devsec", devsecCategories, UserBelonging.NOT_BELONGING, false)); - vres.add(new VRE(5, "devsec", "devsec VRE description", "", "", "/group/devsec", devsecCategories, UserBelonging.NOT_BELONGING, false)); + List devsecCategories = new ArrayList(); + devsecCategories.add(new VRECategory(1, "Development")); + vres.add(new VRE(0, "devsec", "devsec VRE description", "", "", "/group/devsec", devsecCategories, 0,UserBelonging.NOT_BELONGING, false)); + List devVRECategories = new ArrayList(devsecCategories); + devVRECategories.add(new VRECategory(2, "Sailing")); + vres.add(new VRE(1, "devVRE", "devVRE VRE description", "", "", "/group/devVRE", devVRECategories, 1, UserBelonging.NOT_BELONGING, false)); + List devmodeategories = new ArrayList(devsecCategories); + devmodeategories.add(new VRECategory(3, "Climbing")); + vres.add(new VRE(2, "devmode", "devmode VRE description", "", "", "/group/devmode", devmodeategories, 2, UserBelonging.NOT_BELONGING, true)); + vres.add(new VRE(3, "devsec2", "devsec VRE description", "", "", "/group/devsec", devsecCategories, 0, UserBelonging.NOT_BELONGING, false)); + vres.add(new VRE(4, "devsec3", "devsec VRE description", "", "", "/group/devsec", devsecCategories, 0, UserBelonging.NOT_BELONGING, false)); + vres.add(new VRE(5, "devsec4", "devsec VRE description", "", "", "/group/devsec", devsecCategories, 1, UserBelonging.NOT_BELONGING, false)); } } catch (Exception e) { _log.error("Error getting VREs", e); } // Ordering VREs by Name - Collections.sort(vres); + Collections.sort(vres, new Comparator(){ + @Override + public int compare(VRE vre1, VRE vre2) { + int relevanceDiff = vre1.getRelevance() - vre2.getRelevance(); + if (relevanceDiff != 0) { + return relevanceDiff; + } else { + return vre1.getName().compareTo(vre2.getName()); + } + } + }); return vres; } @@ -149,6 +163,39 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService } } + private static final String RELEVANCE = "relevance"; + + public int getRelevance(Organization organization){ + try { + long companyId = OrganizationsUtil.getCompany().getCompanyId(); + _log.trace("Setting Thread Permission"); + User user = UserLocalServiceUtil.getUserByScreenName(companyId, ScopeHelper.getAdministratorUsername()); + PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.create(user, false); + PermissionThreadLocal.setPermissionChecker(permissionChecker); + _log.trace("Setting Permission ok!"); + + if (organization.getExpandoBridge().getAttribute(RELEVANCE) == null || organization.getExpandoBridge().getAttribute(RELEVANCE).equals("")) { + _log.trace(String.format("Attribute %s not initialized. In this case by default Access Grant is permitted", REQUEST_BASED_GROUP)); + return 0; + } else { + String attributeValue = (String) organization.getExpandoBridge().getAttribute(REQUEST_BASED_GROUP); + return Integer.parseInt(attributeValue); + } + } catch (Exception e) { + return 0; + } + } + + public List getCategory(Organization organization) throws SystemException{ + List categories = new ArrayList(); + long organizationPK = organization.getPrimaryKey(); + List categoryList = AssetCategoryLocalServiceUtil.getCategories(Organization.class.getName(), organizationPK); + for(AssetCategory assetCategory : categoryList){ + categories.add(new VRECategory(assetCategory.getCategoryId(), assetCategory.getName())); + } + return categories; + } + public ArrayList getPortalOrganizationMappedToVRE() throws SystemException, PortalException { ArrayList vres = new ArrayList(); @@ -182,6 +229,9 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService String vreName = vreOrganization.getName(); String vreDescription = (vreOrganization.getComments()!=null) ? vreOrganization.getComments() : ""; + + + long logoId = vreOrganization.getLogoId(); String vreLogoURL = String.format("%s/organization_logo?img_id=%s&t=%s", imagePath, logoId, ImageServletTokenUtil.getToken(logoId)); @@ -193,10 +243,12 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService boolean requireAccessGrant = requireAccessGrant(vreOrganization); - List categories = new ArrayList(); + List categories = getCategory(vreOrganization); _log.debug(String.format("VRE preferences : %s", vreOrganization.getPreferences())); - vres.add(new VRE(vreID,vreName, vreDescription, vreLogoURL, groupName,friendlyURL, categories, UserBelonging.NOT_BELONGING, requireAccessGrant)); + int relevance = getRelevance(vreOrganization); + + vres.add(new VRE(vreID,vreName, vreDescription, vreLogoURL, groupName,friendlyURL, categories, relevance, UserBelonging.NOT_BELONGING, requireAccessGrant)); } } diff --git a/src/main/java/org/gcube/portlets/user/joinvre/shared/VRE.java b/src/main/java/org/gcube/portlets/user/joinvre/shared/VRE.java index 2244e0e..fbb1ad5 100644 --- a/src/main/java/org/gcube/portlets/user/joinvre/shared/VRE.java +++ b/src/main/java/org/gcube/portlets/user/joinvre/shared/VRE.java @@ -12,11 +12,11 @@ public class VRE extends ResearchEnvironment implements Serializable, Comparable protected boolean uponRequest; protected long id; - protected List categories; + protected List categories; + protected int relevance; public VRE() { super(); - this.uponRequest = true; } /** @@ -31,12 +31,13 @@ public class VRE extends ResearchEnvironment implements Serializable, Comparable * @param uponRequest */ public VRE(long id, String vreName, String description, String imageURL, - String vomsGroupName, String friendlyURL, List categories, + String vomsGroupName, String friendlyURL, List categories, int relevance, UserBelonging userBelonging, boolean uponRequest) { super(vreName, description, imageURL, vomsGroupName, friendlyURL, userBelonging); this.uponRequest = uponRequest; this.id = id; this.categories = categories; + this.relevance = relevance; } public boolean isUponRequest() { @@ -54,17 +55,31 @@ public class VRE extends ResearchEnvironment implements Serializable, Comparable this.id = id; } + /** + * @return the relevance + */ + public int getRelevance() { + return relevance; + } + + /** + * @param relevance the relevance to set + */ + public void setRelevance(int relevance) { + this.relevance = relevance; + } + /** * @return the categories */ - public List getCategories() { + public List getCategories() { return categories; } /** * @param categories the categories to set */ - public void setCategories(List categories) { + public void setCategories(List categories) { this.categories = categories; } @@ -74,9 +89,8 @@ public class VRE extends ResearchEnvironment implements Serializable, Comparable } @Override - public int compareTo(VRE o) { - return this.getName().compareTo(o.getName()); + public int compareTo(VRE vre) { + return this.getName().compareTo(vre.getName()); } - } diff --git a/src/main/java/org/gcube/portlets/user/joinvre/shared/VRECategory.java b/src/main/java/org/gcube/portlets/user/joinvre/shared/VRECategory.java new file mode 100644 index 0000000..e042dac --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/joinvre/shared/VRECategory.java @@ -0,0 +1,62 @@ +/** + * + */ +package org.gcube.portlets.user.joinvre.shared; + +import java.io.Serializable; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +@SuppressWarnings("serial") +public class VRECategory implements Serializable, Comparable { + + protected long categoryID; + protected String name; + + public VRECategory() { + super(); + } + + /** + * @param categoryID + * @param name + */ + public VRECategory(long categoryID, String name) { + super(); + this.categoryID = categoryID; + this.name = name; + } + + /** + * @return the categoryID + */ + public long getCategoryID() { + return categoryID; + } + /** + * @param categoryID the categoryID to set + */ + public void setCategoryID(long categoryID) { + this.categoryID = categoryID; + } + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** {@inheritDoc} */ + @Override + public int compareTo(VRECategory vreCategory) { + return name.compareTo(vreCategory.name); + } +} diff --git a/src/main/webapp/JoinVRE.css b/src/main/webapp/JoinVRE.css index 9a392ac..1818ded 100644 --- a/src/main/webapp/JoinVRE.css +++ b/src/main/webapp/JoinVRE.css @@ -1,3 +1,14 @@ +.relevance { + color: #225f97; + font-size: 110%; + font-weight: bold; + margin-top: 10px; +} + +.relevance.first { + margin-top: 0; +} + .framed { width: 146px; padding: 10px; @@ -7,6 +18,7 @@ -moz-border-radius: 6px !important; -webkit-border-radius: 6px !important; border: 1px solid #9b9b9b; + display: inline-block; } .framed:hover { @@ -57,7 +69,7 @@ } .vreCategories > * { - display: inline; + display: inline-block; } .joinButton {