ported to lR 62
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portal/social-mail-servlet@128670 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
d682008289
commit
3348311331
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<faceted-project>
|
<faceted-project>
|
||||||
<fixed facet="wst.jsdt.web"/>
|
<fixed facet="wst.jsdt.web"/>
|
||||||
<installed facet="jst.web" version="2.3"/>
|
<installed facet="jst.web" version="3.0"/>
|
||||||
<installed facet="wst.jsdt.web" version="1.0"/>
|
<installed facet="wst.jsdt.web" version="1.0"/>
|
||||||
<installed facet="java" version="1.7"/>
|
<installed facet="java" version="1.7"/>
|
||||||
<installed facet="jst.jaxrs" version="2.0"/>
|
<installed facet="jst.jaxrs" version="2.0"/>
|
||||||
|
|
4
pom.xml
4
pom.xml
|
@ -11,13 +11,13 @@
|
||||||
<groupId>org.gcube.portal</groupId>
|
<groupId>org.gcube.portal</groupId>
|
||||||
<artifactId>social-mail-servlet</artifactId>
|
<artifactId>social-mail-servlet</artifactId>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<version>1.4.0-SNAPSHOT</version>
|
<version>2.0.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<name>social-mail-servlet Webapp</name>
|
<name>social-mail-servlet Webapp</name>
|
||||||
<description>This component read periodically email replies from user wanting to reply to a post via email</description>
|
<description>This component read periodically email replies from user wanting to reply to a post via email</description>
|
||||||
<properties>
|
<properties>
|
||||||
<java-version>1.7</java-version>
|
<java-version>1.7</java-version>
|
||||||
<liferay-version>6.0.6</liferay-version>
|
<liferay-version>6.2.5</liferay-version>
|
||||||
<distroDirectory>${project.basedir}/distro</distroDirectory>
|
<distroDirectory>${project.basedir}/distro</distroDirectory>
|
||||||
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
|
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
|
||||||
<distroDirectory>distro</distroDirectory>
|
<distroDirectory>distro</distroDirectory>
|
||||||
|
|
|
@ -4,6 +4,7 @@ import static org.gcube.resources.discovery.icclient.ICFactory.clientFor;
|
||||||
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
@ -18,16 +19,26 @@ import org.gcube.common.encryption.StringEncrypter;
|
||||||
import org.gcube.common.portal.PortalContext;
|
import org.gcube.common.portal.PortalContext;
|
||||||
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||||
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
||||||
import org.gcube.common.resources.gcore.utils.Group;
|
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl;
|
import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl;
|
||||||
import org.gcube.portal.databook.server.DatabookStore;
|
import org.gcube.portal.databook.server.DatabookStore;
|
||||||
|
import org.gcube.portal.socialmail.EmailPopAccount;
|
||||||
import org.gcube.portal.socialmail.PeriodicTask;
|
import org.gcube.portal.socialmail.PeriodicTask;
|
||||||
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
||||||
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
|
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
|
||||||
|
import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault;
|
||||||
|
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
|
||||||
|
import org.gcube.vomanagement.usermanagement.model.CustomAttributeKeys;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.liferay.portal.kernel.exception.PortalException;
|
||||||
|
import com.liferay.portal.kernel.exception.SystemException;
|
||||||
|
import com.liferay.portal.model.Group;
|
||||||
|
import com.liferay.portal.model.VirtualHost;
|
||||||
|
import com.liferay.portal.service.LayoutSetLocalServiceUtil;
|
||||||
|
import com.liferay.portal.service.VirtualHostLocalServiceUtil;
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
public class PortalSchedulerService extends HttpServlet {
|
public class PortalSchedulerService extends HttpServlet {
|
||||||
|
@ -35,52 +46,105 @@ public class PortalSchedulerService extends HttpServlet {
|
||||||
private static final Logger _log = LoggerFactory.getLogger(PortalSchedulerService.class);
|
private static final Logger _log = LoggerFactory.getLogger(PortalSchedulerService.class);
|
||||||
|
|
||||||
private static final String POP3_SERVER_NAME = "Pop3MailServer";
|
private static final String POP3_SERVER_NAME = "Pop3MailServer";
|
||||||
|
|
||||||
private static final int POP3_MINUTES_DELAY = 1;
|
private static final int POP3_MINUTES_DELAY = 1;
|
||||||
|
|
||||||
|
|
||||||
private static DatabookStore store;
|
private static DatabookStore store;
|
||||||
|
|
||||||
private String portalName;
|
|
||||||
private String pop3Server;
|
|
||||||
private String pop3user;
|
|
||||||
private String pop3password;
|
|
||||||
|
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
store = new DBCassandraAstyanaxImpl();
|
store = new DBCassandraAstyanaxImpl();
|
||||||
portalName = PortalContext.getPortalInstanceName();
|
}
|
||||||
|
|
||||||
PortalContext context = PortalContext.getConfiguration();
|
|
||||||
String scope = "/" + context.getInfrastructureName();
|
|
||||||
ScopeProvider.instance.set(scope);
|
|
||||||
|
|
||||||
|
|
||||||
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
|
||||||
|
Group site;
|
||||||
|
EmailPopAccount popAccount = null;
|
||||||
|
try {
|
||||||
|
site = getSiteFromServletRequest(request);
|
||||||
|
popAccount = getPopAccountData(site);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
ScheduledExecutorService pop3Scheduler = Executors.newScheduledThreadPool(1);
|
||||||
|
pop3Scheduler.scheduleAtFixedRate(new PeriodicTask(store, popAccount, request), 0, POP3_MINUTES_DELAY, TimeUnit.MINUTES);
|
||||||
|
|
||||||
|
String toReturn = "<DIV>Check Notification Email Started ... </DIV>";
|
||||||
|
|
||||||
|
response.setContentType("text/html");
|
||||||
|
response.getWriter().write(toReturn);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return the current Group instance based on the request
|
||||||
|
* @throws PortalException
|
||||||
|
* @throws SystemException
|
||||||
|
*/
|
||||||
|
private Group getSiteFromServletRequest(final HttpServletRequest request) throws PortalException, SystemException {
|
||||||
|
String serverName = request.getServerName();
|
||||||
|
_log.debug("currentHost is " + serverName);
|
||||||
|
Group site = null;
|
||||||
|
List<VirtualHost> vHosts = VirtualHostLocalServiceUtil.getVirtualHosts(0, VirtualHostLocalServiceUtil.getVirtualHostsCount());
|
||||||
|
for (VirtualHost virtualHost : vHosts) {
|
||||||
|
_log.debug("Found " + virtualHost.getHostname());
|
||||||
|
if (virtualHost.getHostname().compareTo("localhost") != 0 &&
|
||||||
|
virtualHost.getLayoutSetId() != 0 &&
|
||||||
|
virtualHost.getHostname().compareTo(serverName) == 0) {
|
||||||
|
long layoutSetId = virtualHost.getLayoutSetId();
|
||||||
|
site = LayoutSetLocalServiceUtil.getLayoutSet(layoutSetId).getGroup();
|
||||||
|
_log.debug("Found match! Your site is " + site.getName());
|
||||||
|
return site;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EmailPopAccount getPopAccountData(Group site) throws GroupRetrievalFault {
|
||||||
|
|
||||||
|
_log.debug("Found site for vhost, name " + site.getName() + " reading custom field: " + CustomAttributeKeys.GATEWAY_SITE_NAME);
|
||||||
|
String gatewayName = (String) new LiferayGroupManager().readCustomAttr(site.getGroupId(), CustomAttributeKeys.GATEWAY_SITE_NAME.getKeyName());
|
||||||
|
|
||||||
|
//set the scope for the query
|
||||||
|
String curScope = ScopeProvider.instance.get();
|
||||||
|
PortalContext context = PortalContext.getConfiguration();
|
||||||
|
String scope2Set = "/" + context.getInfrastructureName();
|
||||||
|
ScopeProvider.instance.set(scope2Set);
|
||||||
|
|
||||||
|
EmailPopAccount toReturn = new EmailPopAccount();
|
||||||
|
toReturn.setPortalName(gatewayName);
|
||||||
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
||||||
query.addCondition("$resource/Profile/Category/text() eq 'Portal'");
|
query.addCondition("$resource/Profile/Category/text() eq 'Portal'");
|
||||||
query.addCondition("$resource/Profile/Name/text() eq '" + portalName + "'");
|
query.addCondition("$resource/Profile/Name/text() eq '" + gatewayName + "'");
|
||||||
|
|
||||||
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
||||||
|
|
||||||
List<ServiceEndpoint> list = client.submit(query);
|
List<ServiceEndpoint> list = client.submit(query);
|
||||||
if (list == null || list.isEmpty()) {
|
if (list == null || list.isEmpty()) {
|
||||||
_log.error("Could not find any Service endpoint registred in the infrastructure for this portal: " + portalName);
|
_log.error("Could not find any Service endpoint registred in the infrastructure for this gateway: " + gatewayName);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
else if (list.size() > 1) {
|
else if (list.size() > 1) {
|
||||||
_log.warn("Found more than one Service endpoint registred in the infrastructure for this portal: " + portalName);
|
_log.warn("Found more than one Service endpoint registred in the infrastructure for this gateway: " + gatewayName);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (ServiceEndpoint res : list) {
|
for (ServiceEndpoint res : list) {
|
||||||
Group<AccessPoint> apGroup = res.profile().accessPoints();
|
org.gcube.common.resources.gcore.utils.Group<AccessPoint> apGroup = res.profile().accessPoints();
|
||||||
AccessPoint[] accessPoints = (AccessPoint[]) apGroup.toArray(new AccessPoint[apGroup.size()]);
|
AccessPoint[] accessPoints = (AccessPoint[]) apGroup.toArray(new AccessPoint[apGroup.size()]);
|
||||||
for (int i = 0; i < accessPoints.length; i++) {
|
for (int i = 0; i < accessPoints.length; i++) {
|
||||||
if (accessPoints[i].name().compareTo(POP3_SERVER_NAME) == 0) {
|
if (accessPoints[i].name().compareTo(POP3_SERVER_NAME) == 0) {
|
||||||
_log.info("Found credentials for " + POP3_SERVER_NAME);
|
_log.info("Found credentials for " + POP3_SERVER_NAME);
|
||||||
AccessPoint found = accessPoints[i];
|
AccessPoint found = accessPoints[i];
|
||||||
pop3Server = found.address();
|
toReturn.setPop3Server(found.address());
|
||||||
pop3user = found.username();
|
toReturn.setPop3user(found.username());
|
||||||
String encrPassword = found.password();
|
String encrPassword = found.password();
|
||||||
try {
|
try {
|
||||||
pop3password = StringEncrypter.getEncrypter().decrypt( encrPassword);
|
toReturn.setPop3password(StringEncrypter.getEncrypter().decrypt( encrPassword));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
_log.error("Something went wrong while decrypting password for " + POP3_SERVER_NAME);
|
_log.error("Something went wrong while decrypting password for " + POP3_SERVER_NAME);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -89,18 +153,12 @@ public class PortalSchedulerService extends HttpServlet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//set the previous scope
|
||||||
|
ScopeProvider.instance.set(curScope);
|
||||||
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
||||||
|
|
||||||
ScheduledExecutorService pop3Scheduler = Executors.newScheduledThreadPool(1);
|
|
||||||
pop3Scheduler.scheduleAtFixedRate(new PeriodicTask(store, portalName, pop3Server, pop3user, pop3password), 0, POP3_MINUTES_DELAY, TimeUnit.MINUTES);
|
|
||||||
|
|
||||||
String toReturn = "<DIV>Check Notification Email Started ... </DIV>";
|
|
||||||
|
|
||||||
response.setContentType("text/html");
|
|
||||||
response.getWriter().write(toReturn);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package org.gcube.portal.socialmail;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class EmailPopAccount implements Serializable {
|
||||||
|
private String portalName;
|
||||||
|
private String pop3Server;
|
||||||
|
private String pop3user;
|
||||||
|
private String pop3password;
|
||||||
|
|
||||||
|
|
||||||
|
public EmailPopAccount() {
|
||||||
|
this.portalName = "";
|
||||||
|
this.pop3Server = "";
|
||||||
|
this.pop3user = "";
|
||||||
|
this.pop3password = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailPopAccount(String portalName, String pop3Server,
|
||||||
|
String pop3user, String pop3password) {
|
||||||
|
super();
|
||||||
|
this.portalName = portalName;
|
||||||
|
this.pop3Server = pop3Server;
|
||||||
|
this.pop3user = pop3user;
|
||||||
|
this.pop3password = pop3password;
|
||||||
|
}
|
||||||
|
public String getPortalName() {
|
||||||
|
return portalName;
|
||||||
|
}
|
||||||
|
public void setPortalName(String portalName) {
|
||||||
|
this.portalName = portalName;
|
||||||
|
}
|
||||||
|
public String getPop3Server() {
|
||||||
|
return pop3Server;
|
||||||
|
}
|
||||||
|
public void setPop3Server(String pop3Server) {
|
||||||
|
this.pop3Server = pop3Server;
|
||||||
|
}
|
||||||
|
public String getPop3user() {
|
||||||
|
return pop3user;
|
||||||
|
}
|
||||||
|
public void setPop3user(String pop3user) {
|
||||||
|
this.pop3user = pop3user;
|
||||||
|
}
|
||||||
|
public String getPop3password() {
|
||||||
|
return pop3password;
|
||||||
|
}
|
||||||
|
public void setPop3password(String pop3password) {
|
||||||
|
this.pop3password = pop3password;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ import javax.mail.Session;
|
||||||
import javax.mail.Store;
|
import javax.mail.Store;
|
||||||
import javax.mail.internet.InternetAddress;
|
import javax.mail.internet.InternetAddress;
|
||||||
import javax.mail.internet.MimeMessage.RecipientType;
|
import javax.mail.internet.MimeMessage.RecipientType;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.gcube.application.framework.core.session.ASLSession;
|
import org.gcube.application.framework.core.session.ASLSession;
|
||||||
import org.gcube.application.framework.core.session.SessionManager;
|
import org.gcube.application.framework.core.session.SessionManager;
|
||||||
|
@ -26,7 +27,8 @@ import org.gcube.application.framework.core.util.GenderType;
|
||||||
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager;
|
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager;
|
||||||
import org.gcube.applicationsupportlayer.social.NotificationsManager;
|
import org.gcube.applicationsupportlayer.social.NotificationsManager;
|
||||||
import org.gcube.applicationsupportlayer.social.mailing.AppType;
|
import org.gcube.applicationsupportlayer.social.mailing.AppType;
|
||||||
import org.gcube.applicationsupportlayer.social.mailing.EmailPlugin;
|
import org.gcube.applicationsupportlayer.social.mailing.SocialMailingUtil;
|
||||||
|
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite;
|
||||||
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser;
|
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser;
|
||||||
import org.gcube.common.homelibrary.home.HomeLibrary;
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
||||||
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
||||||
|
@ -37,7 +39,6 @@ import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNot
|
||||||
import org.gcube.common.homelibrary.home.workspace.sharing.WorkspaceMessage;
|
import org.gcube.common.homelibrary.home.workspace.sharing.WorkspaceMessage;
|
||||||
import org.gcube.common.homelibrary.home.workspace.sharing.WorkspaceMessageManager;
|
import org.gcube.common.homelibrary.home.workspace.sharing.WorkspaceMessageManager;
|
||||||
import org.gcube.common.portal.PortalContext;
|
import org.gcube.common.portal.PortalContext;
|
||||||
import org.gcube.portal.custom.communitymanager.OrganizationsUtil;
|
|
||||||
import org.gcube.portal.databook.server.DatabookStore;
|
import org.gcube.portal.databook.server.DatabookStore;
|
||||||
import org.gcube.portal.databook.shared.Comment;
|
import org.gcube.portal.databook.shared.Comment;
|
||||||
import org.gcube.portal.databook.shared.Feed;
|
import org.gcube.portal.databook.shared.Feed;
|
||||||
|
@ -50,13 +51,12 @@ import org.gcube.portal.notifications.bean.GenericItemBean;
|
||||||
import org.gcube.portal.notifications.thread.CommentNotificationsThread;
|
import org.gcube.portal.notifications.thread.CommentNotificationsThread;
|
||||||
import org.gcube.portal.notifications.thread.LikeNotificationsThread;
|
import org.gcube.portal.notifications.thread.LikeNotificationsThread;
|
||||||
import org.gcube.portal.notifications.thread.MessageNotificationsThread;
|
import org.gcube.portal.notifications.thread.MessageNotificationsThread;
|
||||||
|
import org.gcube.vomanagement.usermanagement.UserManager;
|
||||||
|
import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager;
|
||||||
|
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.liferay.portal.kernel.exception.PortalException;
|
|
||||||
import com.liferay.portal.kernel.exception.SystemException;
|
|
||||||
import com.liferay.portal.model.User;
|
|
||||||
import com.liferay.portal.service.UserLocalServiceUtil;
|
|
||||||
import com.sun.mail.util.MailSSLSocketFactory;
|
import com.sun.mail.util.MailSSLSocketFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,24 +68,24 @@ public class PeriodicTask implements Runnable {
|
||||||
private static final Logger _log = LoggerFactory.getLogger(PeriodicTask.class);
|
private static final Logger _log = LoggerFactory.getLogger(PeriodicTask.class);
|
||||||
|
|
||||||
private DatabookStore socialStore;
|
private DatabookStore socialStore;
|
||||||
private String host;
|
private EmailPopAccount popAccount;
|
||||||
private String mailserver_username;
|
private SocialNetworkingSite site;
|
||||||
private String password;
|
|
||||||
private String portalName;
|
|
||||||
|
|
||||||
public PeriodicTask(DatabookStore store, String portalName, String host, String mailserver_username, String password) {
|
public PeriodicTask(DatabookStore store, EmailPopAccount popAccount, HttpServletRequest request) {
|
||||||
super();
|
super();
|
||||||
this.socialStore = store;
|
this.socialStore = store;
|
||||||
this.portalName = portalName;
|
this.popAccount = popAccount;
|
||||||
this.host = host;
|
this.site = new SocialNetworkingSite(request);
|
||||||
this.mailserver_username = mailserver_username;
|
String serverName = request.getServerName();
|
||||||
this.password = password;
|
//needed because the servlet is called via http
|
||||||
|
this.site.setSiteURL("https://"+serverName);
|
||||||
|
_log.debug("PeriodicTask instanciated, request serverName=" + serverName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
check(portalName, host, mailserver_username, password);
|
check(popAccount.getPortalName(), popAccount.getPop3Server(), popAccount.getPop3user(), popAccount.getPop3password());
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -95,19 +95,17 @@ public class PeriodicTask implements Runnable {
|
||||||
String sessionID = UUID.randomUUID().toString();
|
String sessionID = UUID.randomUUID().toString();
|
||||||
PortalContext context = PortalContext.getConfiguration();
|
PortalContext context = PortalContext.getConfiguration();
|
||||||
String scope = "/" + context.getInfrastructureName();
|
String scope = "/" + context.getInfrastructureName();
|
||||||
|
|
||||||
String username = "";
|
String username = "";
|
||||||
long companyId;
|
|
||||||
try {
|
try {
|
||||||
companyId = OrganizationsUtil.getCompany().getCompanyId();
|
UserManager um = new LiferayUserManager();
|
||||||
User user = UserLocalServiceUtil.getUserByEmailAddress(companyId, emailAddress);
|
GCubeUser user = um.getUserByEmail(emailAddress);
|
||||||
username = user.getScreenName();
|
username = user.getUsername();
|
||||||
SessionManager.getInstance().getASLSession(sessionID, username).setScope(scope);
|
SessionManager.getInstance().getASLSession(sessionID, username).setScope(scope);
|
||||||
|
|
||||||
//add the social information needed by apps
|
//add the social information needed by apps
|
||||||
String fullName = user.getFirstName() + " " + user.getLastName();
|
String fullName = user.getFirstName() + " " + user.getLastName();
|
||||||
String email = user.getEmailAddress();
|
String email = user.getEmail();
|
||||||
String thumbnailURL = "/image/user_male_portrait?img_id="+user.getPortraitId();
|
String thumbnailURL = user.getUserAvatarURL();
|
||||||
boolean isMale = user.isMale();
|
boolean isMale = user.isMale();
|
||||||
|
|
||||||
SessionManager.getInstance().getASLSession(sessionID, username).setUserFullName(fullName);
|
SessionManager.getInstance().getASLSession(sessionID, username).setUserFullName(fullName);
|
||||||
|
@ -117,7 +115,7 @@ public class PeriodicTask implements Runnable {
|
||||||
|
|
||||||
_log.debug("Created fakesession for user " + username + " email="+emailAddress);
|
_log.debug("Created fakesession for user " + username + " email="+emailAddress);
|
||||||
|
|
||||||
} catch (PortalException | SystemException e) {
|
} catch (Exception e) {
|
||||||
_log.error("Exception while trying to get the user from email address: " + e.getMessage());
|
_log.error("Exception while trying to get the user from email address: " + e.getMessage());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -264,10 +262,11 @@ public class PeriodicTask implements Runnable {
|
||||||
_log.debug("Message with subject: " + subject, " hase been sent, returned id: " + newMessageId);
|
_log.debug("Message with subject: " + subject, " hase been sent, returned id: " + newMessageId);
|
||||||
|
|
||||||
if (newMessageId != null) {
|
if (newMessageId != null) {
|
||||||
_log.debug("Sending message notifications ... ");
|
_log.debug("Sending message notifications ... site server URL= " + site.getSiteURL());
|
||||||
List<GenericItemBean> recipients = getUsersbyUserId(recipientIds);
|
List<GenericItemBean> recipients = getUsersbyUserId(recipientIds);
|
||||||
|
|
||||||
NotificationsManager nm = new ApplicationNotificationsManager(
|
NotificationsManager nm = new ApplicationNotificationsManager(
|
||||||
|
site,
|
||||||
fakeSession.getScope(),
|
fakeSession.getScope(),
|
||||||
new SocialNetworkingUser(fakeSession.getUsername(), fakeSession.getUserEmailAddress(), fakeSession.getUserFullName(), fakeSession.getUserAvatarId())
|
new SocialNetworkingUser(fakeSession.getUsername(), fakeSession.getUserEmailAddress(), fakeSession.getUserFullName(), fakeSession.getUserAvatarId())
|
||||||
);
|
);
|
||||||
|
@ -298,11 +297,11 @@ public class PeriodicTask implements Runnable {
|
||||||
private List<GenericItemBean> getUsersbyUserId(List<String> recipientIds) {
|
private List<GenericItemBean> getUsersbyUserId(List<String> recipientIds) {
|
||||||
List<GenericItemBean> recipients = new ArrayList<GenericItemBean>();
|
List<GenericItemBean> recipients = new ArrayList<GenericItemBean>();
|
||||||
for (String userid : recipientIds) {
|
for (String userid : recipientIds) {
|
||||||
com.liferay.portal.model.User user;
|
GCubeUser user;
|
||||||
try {
|
try {
|
||||||
user = UserLocalServiceUtil.getUserByScreenName(OrganizationsUtil.getCompany().getCompanyId(), userid);
|
user = new LiferayUserManager().getUserByUsername(userid);
|
||||||
recipients.add(new GenericItemBean(""+user.getUserId(), user.getScreenName(), user.getFullName(), ""));
|
recipients.add(new GenericItemBean(""+user.getUserId(), user.getUsername(), user.getFullname(), ""));
|
||||||
} catch (PortalException | SystemException e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -320,7 +319,7 @@ public class PeriodicTask implements Runnable {
|
||||||
private void handlePostReply(String portalName, String feedId, Message message, ASLSession fakeSession) throws Exception {
|
private void handlePostReply(String portalName, String feedId, Message message, ASLSession fakeSession) throws Exception {
|
||||||
String commentText = extractText(portalName, feedId, message);
|
String commentText = extractText(portalName, feedId, message);
|
||||||
_log.info("Extracted id: " + feedId + " text=" + commentText);
|
_log.info("Extracted id: " + feedId + " text=" + commentText);
|
||||||
String escapedCommentText = Utils.escapeHtmlAndTransformUrl(commentText);
|
String escapedCommentText = org.gcube.portal.socialmail.Utils.escapeHtmlAndTransformUrl(commentText);
|
||||||
String subject = message.getSubject();
|
String subject = message.getSubject();
|
||||||
|
|
||||||
if (escapedCommentText.trim().compareTo("") == 0) {//it is a favorite/subscription
|
if (escapedCommentText.trim().compareTo("") == 0) {//it is a favorite/subscription
|
||||||
|
@ -377,6 +376,7 @@ public class PeriodicTask implements Runnable {
|
||||||
boolean isAppFeed = feed.isApplicationFeed();
|
boolean isAppFeed = feed.isApplicationFeed();
|
||||||
|
|
||||||
NotificationsManager nm = new ApplicationNotificationsManager(
|
NotificationsManager nm = new ApplicationNotificationsManager(
|
||||||
|
site,
|
||||||
fakeSession.getScope(),
|
fakeSession.getScope(),
|
||||||
new SocialNetworkingUser(fakeSession.getUsername(), fakeSession.getUserEmailAddress(), fakeSession.getUserFullName(), fakeSession.getUserAvatarId())
|
new SocialNetworkingUser(fakeSession.getUsername(), fakeSession.getUserEmailAddress(), fakeSession.getUserFullName(), fakeSession.getUserAvatarId())
|
||||||
);
|
);
|
||||||
|
@ -407,6 +407,7 @@ public class PeriodicTask implements Runnable {
|
||||||
|
|
||||||
//if the user who commented this post is not the user who posted it notifies the poster user (Feed owner)
|
//if the user who commented this post is not the user who posted it notifies the poster user (Feed owner)
|
||||||
NotificationsManager nm = new ApplicationNotificationsManager(
|
NotificationsManager nm = new ApplicationNotificationsManager(
|
||||||
|
site,
|
||||||
fakeSession.getScope(),
|
fakeSession.getScope(),
|
||||||
new SocialNetworkingUser(fakeSession.getUsername(), fakeSession.getUserEmailAddress(), fakeSession.getUserFullName(), fakeSession.getUserAvatarId())
|
new SocialNetworkingUser(fakeSession.getUsername(), fakeSession.getUserEmailAddress(), fakeSession.getUserFullName(), fakeSession.getUserAvatarId())
|
||||||
);
|
);
|
||||||
|
@ -473,7 +474,7 @@ public class PeriodicTask implements Runnable {
|
||||||
try {
|
try {
|
||||||
messageContent = message.getContent();
|
messageContent = message.getContent();
|
||||||
String toParse = null;
|
String toParse = null;
|
||||||
final String SEPARATOR = EmailPlugin.WRITE_ABOVE_TO_REPLY.substring(0, 23);
|
final String SEPARATOR = SocialMailingUtil.WRITE_ABOVE_TO_REPLY.substring(0, 23);
|
||||||
// Check if content is pure text/html or in parts
|
// Check if content is pure text/html or in parts
|
||||||
if (messageContent instanceof Multipart) {
|
if (messageContent instanceof Multipart) {
|
||||||
_log.debug("Checking if isValidReply, found Multipart Message, getting text part ... looking for separator " + SEPARATOR);
|
_log.debug("Checking if isValidReply, found Multipart Message, getting text part ... looking for separator " + SEPARATOR);
|
||||||
|
@ -512,7 +513,7 @@ public class PeriodicTask implements Runnable {
|
||||||
private static String extractText(String portalName, String subjectId, Message message) throws Exception {
|
private static String extractText(String portalName, String subjectId, Message message) throws Exception {
|
||||||
Object messageContent = message.getContent();
|
Object messageContent = message.getContent();
|
||||||
String toParse = null;
|
String toParse = null;
|
||||||
final String SEPARATOR = EmailPlugin.WRITE_ABOVE_TO_REPLY.substring(0, 23);
|
final String SEPARATOR = SocialMailingUtil.WRITE_ABOVE_TO_REPLY.substring(0, 23);
|
||||||
// Check if content is pure text/html or in parts
|
// Check if content is pure text/html or in parts
|
||||||
if (messageContent instanceof Multipart) {
|
if (messageContent instanceof Multipart) {
|
||||||
_log.debug("Found Multipart Message, getting text part ... looking for separator " + SEPARATOR);
|
_log.debug("Found Multipart Message, getting text part ... looking for separator " + SEPARATOR);
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
<!DOCTYPE web-app PUBLIC
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
"http://java.sun.com/dtd/web-app_2_3.dtd" >
|
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
|
||||||
|
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||||
|
version="3.0">
|
||||||
|
|
||||||
<web-app>
|
|
||||||
<display-name>Email Comments Reader Webapp</display-name>
|
<display-name>Email Comments Reader Webapp</display-name>
|
||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
|
|
Loading…
Reference in New Issue