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 {