diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..8844579 --- /dev/null +++ b/.classpath @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..5dbe300 --- /dev/null +++ b/.project @@ -0,0 +1,59 @@ + + + vre-members + vre-members project + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.maven.ide.eclipse.maven2Nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + com.google.gwt.eclipse.core.gwtNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..ba3c245 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/.settings/com.google.appengine.eclipse.core.prefs b/.settings/com.google.appengine.eclipse.core.prefs new file mode 100644 index 0000000..a60576c --- /dev/null +++ b/.settings/com.google.appengine.eclipse.core.prefs @@ -0,0 +1,3 @@ +#Thu Jun 16 10:18:26 CEST 2011 +eclipse.preferences.version=1 +filesCopiedToWebInfLib= diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs new file mode 100644 index 0000000..107fda2 --- /dev/null +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +jarsExcludedFromWebInfLib= +lastWarOutDir=/Users/massi/Documents/workspace/vre-members/target/vre-members-0.1.0-SNAPSHOT +warSrcDir=src/main/webapp +warSrcDirIsOutput=false diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs new file mode 100644 index 0000000..c803c44 --- /dev/null +++ b/.settings/com.google.gwt.eclipse.core.prefs @@ -0,0 +1,5 @@ +#Thu Jun 16 11:14:17 CEST 2011 +eclipse.preferences.version=1 +entryPointModules= +filesCopiedToWebInfLib=gwt-servlet.jar +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgc3JjL21haW4vd2ViYXBwXV0+PC9leHRyYS1hcmdzPjx2bS1hcmdzPjwhW0NEQVRBWy1YbXg1MTJtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLmNvbXBhbnkuU29tZU1vZHVsZTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..443e085 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..834696a --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..4045d87 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 0000000..dae95d4 --- /dev/null +++ b/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Thu Sep 02 10:42:12 CEST 2010 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\\:testResources +skipCompilerPlugin=true +version=1 diff --git a/VreMembersTest-dev.launch b/VreMembersTest-dev.launch new file mode 100644 index 0000000..64c27f9 --- /dev/null +++ b/VreMembersTest-dev.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/VreMembersTest-prod.launch b/VreMembersTest-prod.launch new file mode 100644 index 0000000..6a6f32f --- /dev/null +++ b/VreMembersTest-prod.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..029d6b8 --- /dev/null +++ b/pom.xml @@ -0,0 +1,207 @@ + + + + 4.0.0 + + maven-parent + org.gcube.tools + 1.0.0 + + + + org.gcube.portlets.user + vre-members + war + 0.1.0-SNAPSHOT + gCube VRE Members Portlet + + VRE Members display the members of the current VRE + + + scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/${project.artifactId} + scm:https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/${project.artifactId} + http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/${project.artifactId} + + + + 2.5.1 + distro + 1.7 + 1.7 + ${project.build.directory}/${project.build.finalName} + + UTF-8 + UTF-8 + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + com.google.gwt + gwt-user + provided + + + com.google.gwt + gwt-servlet + provided + + + org.gcube.portlets.user + gcube-widgets + provided + + + org.gcube.portal + custom-portal-handler + provided + + + com.google + gwt-jsonmaker + + + org.gcube.applicationsupportlayer + aslcore + provided + + + org.gcube.portal + social-networking-library + provided + + + org.gcube.dvos + usermanagement-core + + + com.liferay.portal + portal-service + provided + + + javax.portlet + portlet-api + provided + + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-api + + + + + ${webappDirectory}/WEB-INF/classes + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwtVersion} + + + + compile + + + + + + + VREMembers.html + ${webappDirectory} + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + compile + + exploded + + + + + ${webappDirectory} + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2 + + + ${distroDirectory}/descriptor.xml + + + + + servicearchive + install + + single + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + + copy-profile + install + + copy-resources + + + target + + + ${distroDirectory} + true + + profile.xml + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/vremembers/client/MembersService.java b/src/main/java/org/gcube/portlets/user/vremembers/client/MembersService.java new file mode 100644 index 0000000..f8ebf2f --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/client/MembersService.java @@ -0,0 +1,15 @@ +package org.gcube.portlets.user.vremembers.client; + +import java.util.ArrayList; + +import org.gcube.portlets.user.vremembers.shared.BelongingUser; +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +/** + * The client side stub for the RPC service. + */ +@RemoteServiceRelativePath("memberservice") +public interface MembersService extends RemoteService { + ArrayList getOrganizationUsers(); +} diff --git a/src/main/java/org/gcube/portlets/user/vremembers/client/MembersServiceAsync.java b/src/main/java/org/gcube/portlets/user/vremembers/client/MembersServiceAsync.java new file mode 100644 index 0000000..297c5fa --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/client/MembersServiceAsync.java @@ -0,0 +1,13 @@ +package org.gcube.portlets.user.vremembers.client; + +import java.util.ArrayList; + +import org.gcube.portlets.user.vremembers.shared.BelongingUser; + + +import com.google.gwt.user.client.rpc.AsyncCallback; + +public interface MembersServiceAsync { + + void getOrganizationUsers(AsyncCallback> callback); +} diff --git a/src/main/java/org/gcube/portlets/user/vremembers/client/VreMembers.java b/src/main/java/org/gcube/portlets/user/vremembers/client/VreMembers.java new file mode 100644 index 0000000..7172ece --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/client/VreMembers.java @@ -0,0 +1,16 @@ +package org.gcube.portlets.user.vremembers.client; + +import org.gcube.portlets.user.vremembers.client.panels.VREMembersPanel; + +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.user.client.ui.RootPanel; + +/** + * Entry point classes define onModuleLoad(). + */ +public class VreMembers implements EntryPoint { + + public void onModuleLoad() { + RootPanel.get("VRE-Members-Container").add(new VREMembersPanel()); + } +} diff --git a/src/main/java/org/gcube/portlets/user/vremembers/client/panels/VREMembersPanel.java b/src/main/java/org/gcube/portlets/user/vremembers/client/panels/VREMembersPanel.java new file mode 100644 index 0000000..3e8abc5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/client/panels/VREMembersPanel.java @@ -0,0 +1,73 @@ +package org.gcube.portlets.user.vremembers.client.panels; + +import java.util.ArrayList; + +import org.gcube.portlets.user.vremembers.client.MembersService; +import org.gcube.portlets.user.vremembers.client.MembersServiceAsync; +import org.gcube.portlets.user.vremembers.client.ui.DisplayBadge; +import org.gcube.portlets.user.vremembers.shared.BelongingUser; + +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.HasAlignment; +import com.google.gwt.user.client.ui.HasVerticalAlignment; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.VerticalPanel; + +public class VREMembersPanel extends Composite { + /** + * Create a remote service proxy to talk to the server-side Greeting service. + */ + private final MembersServiceAsync vreMemberService = GWT.create(MembersService.class); + + public static final String loading = GWT.getModuleBaseURL() + "../images/members-loader.gif"; + + private Image loadingImage; + + private VerticalPanel mainPanel = new VerticalPanel(); + public VREMembersPanel() { + super(); + loadingImage = new Image(loading); + mainPanel.add(loadingImage); + showLoader(); + vreMemberService.getOrganizationUsers(new AsyncCallback>() { + + @Override + public void onSuccess(ArrayList users) { + mainPanel.clear(); + mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_LEFT); + mainPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); + Grid grid = new Grid(users.size()/3+1, 3); + mainPanel.add(grid); + + for (int i = 0; i < users.size(); i++) { + grid.setWidget(i/3, i%3, new DisplayBadge(users.get(i))); + } + } + + @Override + public void onFailure(Throwable caught) { + mainPanel.add(new HTML("
" + + "Sorry, looks like something is broken with the server connection
" + + "Please check your connection and try refresh this page.
")); + + } + }); + initWidget(mainPanel); + + } + + + private void showLoader() { + mainPanel.clear(); + mainPanel.setWidth("100%"); + mainPanel.setHeight("300px"); + mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER); + mainPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + mainPanel.add(loadingImage); + } +} diff --git a/src/main/java/org/gcube/portlets/user/vremembers/client/ui/DisplayBadge.java b/src/main/java/org/gcube/portlets/user/vremembers/client/ui/DisplayBadge.java new file mode 100644 index 0000000..1e4df50 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/client/ui/DisplayBadge.java @@ -0,0 +1,84 @@ +package org.gcube.portlets.user.vremembers.client.ui; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.codec.binary.Base64; +import org.gcube.portal.databook.client.GCubeSocialNetworking; +import org.gcube.portlets.user.gcubewidgets.client.elements.Span; +import org.gcube.portlets.user.vremembers.shared.BelongingUser; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.Window.Location; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Widget; + +public class DisplayBadge extends Composite { + protected final static String HEADLINE_TEXT = "Professional Headline"; + protected final static String ISTI_TEXT = "Company"; + + private static DisplayBadgeUiBinder uiBinder = GWT.create(DisplayBadgeUiBinder.class); + + interface DisplayBadgeUiBinder extends UiBinder { + } + public static final String avatar_default = GWT.getModuleBaseURL() + "../images/Avatar_default.png"; + public static final String loading = GWT.getModuleBaseURL() + "../images/avatarLoader.gif"; + + @UiField HTMLPanel mainPanel; + @UiField Image avatarImage; + @UiField HTML userFullName; + + @UiField HTML headlineLabel; + @UiField HTML institutionLabel; + @UiField AnchorElement imageRedirect; + + private BelongingUser myUserInfo; + + public DisplayBadge(BelongingUser user) { + initWidget(uiBinder.createAndBindUi(this)); + avatarImage.setUrl(loading); + mainPanel.addStyleName("profile-section"); + + myUserInfo = user; + avatarImage.getElement().getParentElement().setAttribute("href", myUserInfo.getAvatarId()); + avatarImage.setSize("100px", "100px"); + avatarImage.setUrl(myUserInfo.getAvatarId()); + userFullName.setText(myUserInfo.getFullName()); + + + String head = (user.getHeadline() == null || user.getHeadline().compareTo("") == 0) ? "" : user.getHeadline(); + String isti = (user.getInstitution() == null || user.getInstitution().compareTo("") == 0) ? "" : user.getInstitution(); + headlineLabel.setText(head); + institutionLabel.setText(isti); + imageRedirect.setHref(user.getProfileLink()); + String title = "See profile of " + myUserInfo.getFullName(); + avatarImage.setTitle(title); + userFullName.setTitle(title); + + } + + @UiHandler("userFullName") + void onSubmitClick(ClickEvent e) { + Location.assign(myUserInfo.getProfileLink()); + } + + public void showError(String message) { + Window.alert("Failure: " + message); + avatarImage.setSize("100px", "100px"); + avatarImage.setUrl(avatar_default); + } + + + +} diff --git a/src/main/java/org/gcube/portlets/user/vremembers/client/ui/DisplayBadge.ui.xml b/src/main/java/org/gcube/portlets/user/vremembers/client/ui/DisplayBadge.ui.xml new file mode 100644 index 0000000..b2f3847 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/client/ui/DisplayBadge.ui.xml @@ -0,0 +1,71 @@ + + + + .framed { + padding: 10px; + margin: 10px; + background: #FFF; + border-radius: 6px !important; + -moz-border-radius: 6px !important; + -webkit-border-radius: 6px !important; + border: 1px solid #DBDBDB; + } + + .user-photo { + display: block; + padding: 2px; + border: 1px solid #E6E6E6; + } + + .user-details { + padding: 5px; + } + + .fullName { + font-family: 'Helvetica Neue', Arial, sans-serif; + font-size: 22px; + font-weight: bold; + white-space: nowrap; + } + + .fullName:hover { + cursor: pointer; + cursor: hand; + text-decoration: underline; + color: #01497C; + } + + .headline { + font-family: 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + color: #444444; + } + + .institution { + font-family: 'Helvetica Neue', Arial, sans-serif; + font-size: 13px; + color: #444444; + } + + + + + + + +
+ + + + +
+ + + +
+
+
+
\ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/vremembers/server/MembersServiceImpl.java b/src/main/java/org/gcube/portlets/user/vremembers/server/MembersServiceImpl.java new file mode 100644 index 0000000..cc2fed7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/server/MembersServiceImpl.java @@ -0,0 +1,139 @@ +package org.gcube.portlets.user.vremembers.server; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.codec.binary.Base64; +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.common.scope.impl.ScopeBean.Type; +import org.gcube.portal.custom.communitymanager.OrganizationsUtil; +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.portal.databook.client.GCubeSocialNetworking; +import org.gcube.portlets.user.vremembers.client.MembersService; +import org.gcube.portlets.user.vremembers.shared.BelongingUser; +import org.gcube.vomanagement.usermanagement.GroupManager; +import org.gcube.vomanagement.usermanagement.UserManager; +import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayGroupManager; +import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.model.UserModel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; +import com.liferay.portal.service.UserLocalServiceUtil; + +/** + * @author Massimiliano Assante, ISTI-CNR + */ +@SuppressWarnings("serial") +public class MembersServiceImpl extends RemoteServiceServlet implements MembersService { + private static final Logger _log = LoggerFactory.getLogger(MembersServiceImpl.class); + + /** + * the current ASLSession + * @return the session + */ + private ASLSession getASLSession() { + String sessionID = this.getThreadLocalRequest().getSession().getId(); + String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); + if (user == null) { + _log.warn("USER IS NULL setting test.user and Running OUTSIDE PORTAL"); + user = getDevelopmentUser(); + SessionManager.getInstance().getASLSession(sessionID, user).setScope("/gcube"); + } + return SessionManager.getInstance().getASLSession(sessionID, user); + } + /** + * when packaging test will fail if the user is not set to test.user + * @return . + */ + public String getDevelopmentUser() { + String user = "test.user"; + //user = "massimiliano.assante"; + return user; + } + /** + * + * @return true if you're running into the portal, false if in development + */ + private boolean isWithinPortal() { + try { + UserLocalServiceUtil.getService(); + return true; + } + catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) { + _log.trace("Development Mode ON"); + return false; + } + } + /** + * + * @param session the Asl Session + * @param withinPortal true when is on Liferay portal + * @return the users belonging to the current organization (scope) + */ + @Override + public ArrayList getOrganizationUsers() { + ArrayList portalUsers = new ArrayList(); + String scope = getASLSession().getScope(); + if (scope == null) + return portalUsers; + try { + if (isWithinPortal()) { + UserManager um = new LiferayUserManager(); + GroupManager gm = new LiferayGroupManager(); + ScopeBean sb = new ScopeBean(scope); + List users = null; + + if (sb.is(Type.INFRASTRUCTURE)) + users = um.listUsersByGroup(gm.getRootVO().getGroupId()); + else if (sb.is(Type.VRE)) { //must be in VRE + //get the name from the scope + String orgName = scope.substring(scope.lastIndexOf("/")+1, scope.length()); + //ask the users + users = um.listUsersByGroup(gm.getGroupId(orgName)); + } + else { + _log.error("Error, you must be in SCOPE VRE OR INFRASTURCTURE, you are in VO SCOPE returning no users"); + return portalUsers; + } + for (UserModel user : users) { + if (user.getScreenName().compareTo("test.user") != 0) { //skip test.user + String thumbnailURL = ""; + com.liferay.portal.model.User lifeUser = UserLocalServiceUtil.getUserByScreenName(OrganizationsUtil.getCompany().getCompanyId(), user.getScreenName()); + thumbnailURL = lifeUser.isMale() ? "/image/user_male_portrait?img_id="+lifeUser.getPortraitId() : "/image/user_female_portrait?img_id="+lifeUser.getPortraitId(); + portalUsers.add(new BelongingUser(user.getScreenName(), user.getFullname(), thumbnailURL, lifeUser.getJobTitle(), lifeUser.getOpenId(), getUserProfileLink(user.getScreenName() ),lifeUser.getPortraitId() != 0)); + } + } + + } + else { //test users + portalUsers.add(new BelongingUser("massimiliano.assante", "Test User #1", "1111", "headline", "isti", "",false)); + portalUsers.add(new BelongingUser("pino.assante", "Test Second User #2", "1111", "headline1", "istitution complex", "",false)); + portalUsers.add(new BelongingUser("pino.pino", "With Photo Third User", "1111", "hard worker", "acme Ltd", "",true)); + portalUsers.add(new BelongingUser("giorgi.giorgi", "Test Fourth User", "1111", "hard worker 3", "isti3", "",false)); + portalUsers.add(new BelongingUser("pinetti.giorgi", "Test Fifth User", "1111", "hard worker 4", "super acme Inc.", "",false)); + portalUsers.add(new BelongingUser("massimiliano.pinetti", "Test Sixth User", "1111", "hard worker the5th", "istiw", "", false)); + portalUsers.add(new BelongingUser("giorgi.assante", "Ninth Testing User", "1111", "hard worker the9th", "istiw9", "",false)); + portalUsers.add(new BelongingUser("massimiliano.giorgi", "Eighth Testing User", "1111", "hard worker the8th", "istiw56", "", false)); + portalUsers.add(new BelongingUser("giogio.giorgi", "Seventh Test User", "1111", "hard worker the7th", "istiw7", "", false)); + portalUsers.add(new BelongingUser("pino.pinetti", "Tenth Testing User Photoed", "1111", "hard worker the10th", "istiw777", "",true)); + } + } catch (Exception e) { + _log.error("Error in server get all contacts ", e); + } + //users having photo go first + Collections.sort(portalUsers); + return portalUsers; + } + + private String getUserProfileLink(String username) { + return GCubeSocialNetworking.USER_PROFILE_LINK + +"?"+ + new String(Base64.encodeBase64(GCubeSocialNetworking.USER_PROFILE_OID.getBytes()))+"="+ + new String(Base64.encodeBase64(username.getBytes())); + } +} diff --git a/src/main/java/org/gcube/portlets/user/vremembers/server/portlet/VREMembersPortlet.java b/src/main/java/org/gcube/portlets/user/vremembers/server/portlet/VREMembersPortlet.java new file mode 100644 index 0000000..34e18ab --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/server/portlet/VREMembersPortlet.java @@ -0,0 +1,30 @@ + +package org.gcube.portlets.user.vremembers.server.portlet; + +import javax.portlet.GenericPortlet; +import javax.portlet.ActionRequest; +import javax.portlet.RenderRequest; +import javax.portlet.ActionResponse; +import javax.portlet.RenderResponse; +import javax.portlet.PortletException; +import java.io.IOException; +import javax.portlet.PortletRequestDispatcher; + +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; + +/** + * + * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it + */ + public class VREMembersPortlet extends GenericPortlet { + public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { + response.setContentType("text/html"); + ScopeHelper.setContext(request); + PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/VREMembers_view.jsp"); + dispatcher.include(request, response); + } + + public void processAction(ActionRequest request, ActionResponse response) + throws PortletException, IOException { + } +} diff --git a/src/main/java/org/gcube/portlets/user/vremembers/shared/BelongingUser.java b/src/main/java/org/gcube/portlets/user/vremembers/shared/BelongingUser.java new file mode 100644 index 0000000..df5a86b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/vremembers/shared/BelongingUser.java @@ -0,0 +1,110 @@ +package org.gcube.portlets.user.vremembers.shared; + +import java.io.Serializable; + +@SuppressWarnings("serial") +public class BelongingUser implements Serializable, Comparable { + private String username; + private String fullName; + private String avatarId; + private String headline; + private String institution; + private String profileLink; + private boolean hasPhoto; + + public BelongingUser(String username, String fullName, String avatarId, + String headline, String institution, String profileLink, boolean hasPhoto) { + super(); + this.username = username; + this.fullName = fullName; + this.avatarId = avatarId; + this.headline = headline; + this.institution = institution; + this.hasPhoto = hasPhoto; + this.profileLink = profileLink; + } + + public BelongingUser() { + super(); + } + + + public String getUsername() { + return username; + } + + + public void setUsername(String username) { + this.username = username; + } + + + public String getFullName() { + return fullName; + } + + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + + public String getAvatarId() { + return avatarId; + } + + + public void setAvatarId(String avatarId) { + this.avatarId = avatarId; + } + + + public String getHeadline() { + return headline; + } + + + public void setHeadline(String headline) { + this.headline = headline; + } + + + public String getInstitution() { + return institution; + } + + + public void setInstitution(String institution) { + this.institution = institution; + } + + + public boolean hasPhoto() { + return hasPhoto; + } + + public void setHasPhoto(boolean hasPhoto) { + this.hasPhoto = hasPhoto; + } + + + + public String getProfileLink() { + return profileLink; + } + + public void setProfileLink(String profileLink) { + this.profileLink = profileLink; + } + + @Override + public int compareTo(BelongingUser o) { + if (this.hasPhoto && !o.hasPhoto) + return -1; + if (!this.hasPhoto && o.hasPhoto) + return 1; + return 0; + } + + +} diff --git a/src/main/resources/clientlog4j.properties b/src/main/resources/clientlog4j.properties new file mode 100644 index 0000000..4a2e1cd --- /dev/null +++ b/src/main/resources/clientlog4j.properties @@ -0,0 +1,12 @@ +log4j.rootLogger=DEBUG, A1 +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.layout=org.apache.log4j.PatternLayout + +# Print the date in ISO 8601 format +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n + +# Print only messages of level TRACE or above in the package org.gcube +log4j.logger.org.gcube=TRACE +log4j.logger.org.gcube.application.framework.core.session=INFO +log4j.logger.org.gcube.common.scope.impl.DefaultScopeProvider=ERROR +log4j.logger.com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor=ERROR \ No newline at end of file diff --git a/src/main/resources/org/gcube/portlets/user/vremembers/VreMembers.gwt.xml b/src/main/resources/org/gcube/portlets/user/vremembers/VreMembers.gwt.xml new file mode 100644 index 0000000..ed11f3d --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/vremembers/VreMembers.gwt.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/VreMembers.css b/src/main/webapp/VreMembers.css new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/VreMembers.html b/src/main/webapp/VreMembers.html new file mode 100644 index 0000000..3b022b7 --- /dev/null +++ b/src/main/webapp/VreMembers.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + +Vre Members Project + + + + + + + +
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/VREMembers_view.jsp b/src/main/webapp/WEB-INF/jsp/VREMembers_view.jsp new file mode 100644 index 0000000..d8d3d73 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/VREMembers_view.jsp @@ -0,0 +1,6 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + +
diff --git a/src/main/webapp/WEB-INF/liferay-display.xml b/src/main/webapp/WEB-INF/liferay-display.xml new file mode 100644 index 0000000..01ea2ae --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-display.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties new file mode 100644 index 0000000..6263ab8 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -0,0 +1,9 @@ +name=VREMembers +module-group-id=liferay +module-incremental-version=1 +tags= +short-description= +change-log= +page-url=http://www.d4science.org +author=D4Science.org +licenses=EUPL \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml new file mode 100644 index 0000000..ac028cd --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -0,0 +1,28 @@ + + + + + + VREMembers + false + false + false + /VreMembers.css + + + administrator + Administrator + + + guest + Guest + + + power-user + Power User + + + user + User + + diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml new file mode 100644 index 0000000..f19846c --- /dev/null +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -0,0 +1,30 @@ + + + + + VREMembers + VRE Members + org.gcube.portlets.user.vremembers.server.portlet.VREMembersPortlet + + view-jsp + /view.jsp + + 0 + + text/html + + + VRE Members + VRE Members + VRE Members + + + administrator + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..5163667 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + + + + + greetServlet + org.gcube.portlets.user.vremembers.server.MembersServiceImpl + + + + greetServlet + /vremembers/memberservice + + + + + VreMembers.html + + + diff --git a/src/main/webapp/images/Avatar_default.png b/src/main/webapp/images/Avatar_default.png new file mode 100644 index 0000000..2a6c844 Binary files /dev/null and b/src/main/webapp/images/Avatar_default.png differ diff --git a/src/main/webapp/images/avatarLoader.gif b/src/main/webapp/images/avatarLoader.gif new file mode 100644 index 0000000..4c4d825 Binary files /dev/null and b/src/main/webapp/images/avatarLoader.gif differ diff --git a/src/main/webapp/images/members-loader.gif b/src/main/webapp/images/members-loader.gif new file mode 100644 index 0000000..89ae681 Binary files /dev/null and b/src/main/webapp/images/members-loader.gif differ diff --git a/src/test/resources/org/gcube/portlets/user/vremembers/VreMembersJUnit.gwt.xml b/src/test/resources/org/gcube/portlets/user/vremembers/VreMembersJUnit.gwt.xml new file mode 100644 index 0000000..a836131 --- /dev/null +++ b/src/test/resources/org/gcube/portlets/user/vremembers/VreMembersJUnit.gwt.xml @@ -0,0 +1,9 @@ + + + + + + + + +