package org.gcube.portlets.user.sbdportlets; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletException; import javax.servlet.http.HttpServletRequest; import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; import org.gcube.applicationsupportlayer.social.NotificationsManager; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.workspace.Workspace; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portal.notifications.bean.GenericItemBean; import org.gcube.portal.notifications.thread.MessageNotificationsThread; import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager; import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.servlet.SessionMessages; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.model.User; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.PortalUtil; import com.liferay.util.bridges.mvc.MVCPortlet; /** * upload method/dataset: UserUpload Admin - Share idea: UserIdea Admin * Portlet implementation class CollaborateWithUs */ public class CollaborateWithUs extends MVCPortlet { private static Log _log = LogFactoryUtil.getLog(CollaborateWithUs.class); private static String SHARE_IDEA_ROLE_MANAGER_NAME = "UserIdea-Admin"; private LiferayRoleManager roleManager = new LiferayRoleManager(); private LiferayUserManager userManager = new LiferayUserManager(); public void addIdea(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException { try{ User currentUser = (User) actionRequest.getAttribute(WebKeys.USER); ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); long groupId = themeDisplay.getLayout().getGroupId(); String experiment_name = ParamUtil.getString(actionRequest, "experiment_name"); String people_institutions = ParamUtil.getString(actionRequest, "people_institutions"); String theAbstract = ParamUtil.getString(actionRequest, "abstract"); String experiment_tags = ParamUtil.getString(actionRequest, "experiment_tags"); _log.debug("new experiment shared: " + experiment_name); SessionMessages.add(actionRequest.getPortletSession(), "experiment-form-success"); long teamId = roleManager.getTeam(groupId, SHARE_IDEA_ROLE_MANAGER_NAME).getTeamId(); List theManagers = userManager.listUsersByTeam(teamId); HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest); boolean result = sendNotificationToUser(request, groupId, currentUser, theManagers, experiment_name, people_institutions, theAbstract, experiment_tags); if (result) actionResponse.setRenderParameter("mvcPath", "/html/collaboratewithus/view-method-inserted.jsp"); else actionResponse.setRenderParameter("mvcPath", "/html/collaboratewithus/view-method-error.jsp"); } catch(Exception e){ SessionErrors.add(actionRequest.getPortletSession(),"experiment-form-error"); e.printStackTrace(); } } private boolean sendNotificationToUser(HttpServletRequest request, long groupId, User currentUser, List theManagers , String experiment_name, String people_institutions, String theAbstract, String experiment_tags) throws Exception { String scope = PortalContext.getConfiguration().getCurrentScope(""+groupId); _log.info("sendNotificationToUser Scope: " + scope); String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(scope, currentUser.getScreenName()); ScopeProvider.instance.set(scope); SecurityTokenProvider.instance.set(authorizationToken); Workspace workspace = HomeLibrary.getUserWorkspace(currentUser.getScreenName()); List recipientIds = new ArrayList(); List recipients = new ArrayList(); for (GCubeUser addressee : theManagers) { recipients.add(new GenericItemBean(addressee.getUsername(), addressee.getUsername(), addressee.getFullname(), "")); recipientIds.add(addressee.getUsername()); } String subject = "A new user shared an idea"; StringBuilder sb = new StringBuilder("Hi, the following idea was shared by ").append(currentUser.getFullName()) .append(" (").append(currentUser.getEmailAddress()).append(").") .append("\n\n").append("Experiment name: ").append(experiment_name).append("\n") .append("\n").append("Involved people and or institutions: ").append(people_institutions).append("\n") .append("\n").append("Abstract:\n").append(theAbstract).append("\n") .append("\n").append("Keywords (Comma separated): ").append(experiment_tags).append("\n"); String body = sb.toString(); String messageId = workspace.getWorkspaceMessageManager().sendMessageToPortalLogins(subject, body, new ArrayList(), recipientIds); _log.debug("Sending message notification to: " + recipientIds.toString()); NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(request), scope, new SocialNetworkingUser( currentUser.getScreenName(), currentUser.getEmailAddress(), currentUser.getFullName(), "")); Thread thread = new Thread(new MessageNotificationsThread(recipients, messageId, subject, body, nm)); thread.start(); return (messageId != null); } }