From 7920e8301b34c8a59c05a1b72702796cb8c9cc02 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Tue, 19 Jan 2016 10:07:17 +0000 Subject: [PATCH] 1452: Implement a GUI for StatMan Algorithms Importer Task-Url: https://support.d4science.org/issues/1452 Added NotificationRecipients.txt properties file git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@122305 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 12 +++- .../client/codeparser/CodeParser.java | 6 ++ .../client/maindata/CodeEditMessages.java | 2 +- .../client/resource/StatAlgoImporter.css | 2 +- .../resource/StatAlgoImporterResources.java | 2 +- .../server/SessionUtil.java | 19 ++++++ .../server/StatAlgoImporterServiceImpl.java | 45 ++++++++++++-- .../server/social/AlgorithmNotification.java | 29 +++++---- .../server/social/Recipient.java | 58 ++++++++++++++++++ .../shared/Constants.java | 1 + .../client/resource/StatAlgoImporter.css | 2 +- .../images/explorer_dragndrop.png | Bin .../properties/NotificationRecipients.txt | 2 + 13 files changed, 159 insertions(+), 21 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/Recipient.java rename src/main/webapp/{WEB-INF => statalgoimporter}/images/explorer_dragndrop.png (100%) create mode 100644 src/main/webapp/statalgoimporter/properties/NotificationRecipients.txt diff --git a/pom.xml b/pom.xml index cf9d9f7..acaf7fb 100644 --- a/pom.xml +++ b/pom.xml @@ -195,8 +195,8 @@ aslsocial provided - - + + org.gcube.portal notifications-common-library @@ -240,6 +240,14 @@ 1.0.3 + + + org.json + json + 20151123 + + + org.gcube.portlets.widgets diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/codeparser/CodeParser.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/codeparser/CodeParser.java index 9bba1c6..30ba669 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/codeparser/CodeParser.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/codeparser/CodeParser.java @@ -34,6 +34,9 @@ public class CodeParser { if (parameter.contains("<-")) { String[] varDescription = parameter.split("<-"); String defaultValue = varDescription[1].trim(); + if (defaultValue.endsWith(";")) + defaultValue = defaultValue.substring(0, + defaultValue.length() - 1); if (defaultValue.startsWith("\"")) defaultValue = defaultValue.substring(1); if (defaultValue.endsWith("\"")) @@ -48,6 +51,9 @@ public class CodeParser { if (parameter.contains("=")) { String[] varDescription = parameter.split("="); String defaultValue = varDescription[1].trim(); + if (defaultValue.endsWith(";")) + defaultValue = defaultValue.substring(0, + defaultValue.length() - 1); if (defaultValue.startsWith("\"")) defaultValue = defaultValue.substring(1); if (defaultValue.endsWith("\"")) diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditMessages.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditMessages.java index 512f456..95f1aed 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditMessages.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditMessages.java @@ -29,7 +29,7 @@ public interface CodeEditMessages extends Messages { @DefaultMessage("Add output variable from code") String btnAddOutputToolTip(); - @DefaultMessage("Code:") + @DefaultMessage("Main:") String mainCodeFiledLabel(); @DefaultMessage("Select parameter in the code!") diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css index ab3ebd4..6e90020 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css @@ -8,5 +8,5 @@ #drop_target_inner { - background-image: url("images/explorer_dragndrop.png") !important; + background-image: url("statalgoimporter/images/explorer_dragndrop.png") !important; } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java index e52757b..865f287 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java @@ -20,7 +20,7 @@ public interface StatAlgoImporterResources extends ClientBundle { @Source("StatAlgoImporter.css") StatAlgoImporterCSS srCSS(); - + @Source("help_32.png") ImageResource help32(); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java index 9835341..ec458aa 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java @@ -3,6 +3,9 @@ */ package org.gcube.portlets.user.statisticalalgorithmsimporter.server; +import java.util.ArrayList; + +import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; @@ -10,6 +13,7 @@ import org.gcube.application.framework.core.session.SessionManager; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeFileUploadSession; +import org.gcube.portlets.user.statisticalalgorithmsimporter.server.social.Recipient; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor; @@ -61,6 +65,21 @@ public class SessionUtil { } + // + public static ArrayList getRecipients(ServletContext servletContest) { + @SuppressWarnings("unchecked") + ArrayList recipients=(ArrayList)servletContest.getAttribute(Constants.RECIPIENTS); + return recipients; + + } + + public static ArrayList setRecipients(ServletContext servletContest, ArrayList recipients) { + servletContest.setAttribute(Constants.RECIPIENTS,recipients); + return recipients; + + } + + // public static FileUploadMonitor getFileUploadMonitor(HttpSession httpSession) { FileUploadMonitor fileUploadMonitor = (FileUploadMonitor) httpSession diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java index 22e5380..9654530 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java @@ -1,15 +1,20 @@ package org.gcube.portlets.user.statisticalalgorithmsimporter.server; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; +import org.apache.commons.io.IOUtils; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterService; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeReader; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.generator.ProjectBuilder; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.social.AlgorithmNotification; +import org.gcube.portlets.user.statisticalalgorithmsimporter.server.social.Recipient; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.MainCodeSave; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.ProjectArchiver; @@ -22,6 +27,8 @@ import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.Proj import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectFolder; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session.UserInfo; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; +import org.json.JSONArray; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,7 +56,35 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements System.setProperty("jdk.xml.entityExpansionLimit", "0"); System.out.println("initializing StatAlgoImporterService"); + String notificationRecipientsFile = "/statalgoimporter/properties/NotificationRecipients.txt"; + InputStream notificationRecipientsInputStream = this.getServletContext() + .getResourceAsStream(notificationRecipientsFile); + String text = null; + try { + text = IOUtils.toString(notificationRecipientsInputStream, + StandardCharsets.UTF_8.name()); + } catch (IOException e) { + System.out.println(e.getLocalizedMessage()); + System.out.println(e.getStackTrace().toString()); + } + ArrayList recipients = new ArrayList(); + JSONObject obj = new JSONObject(text); + System.out.println(""+obj); + JSONArray arr = obj.getJSONArray("recipients"); + for (int i = 0; i < arr.length(); i++) { + JSONObject dest = arr.getJSONObject(i); + System.out.println("" + dest); + String user = dest.getString("user"); + String surname = dest.getString("surname"); + String name = dest.getString("name"); + Recipient rec = new Recipient(user, surname, name); + recipients.add(rec); + + } + System.out.println("Recipients: "+recipients); + SessionUtil.setRecipients(this.getServletContext(), recipients); + } /** @@ -422,9 +457,9 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements SessionUtil.setProjectSession(session, project); ProjectBuilder projectBuilder = new ProjectBuilder(project, aslSession, session); - project=projectBuilder.build(); + project = projectBuilder.build(); SessionUtil.setProjectSession(session, project); - ProjectArchiver.archive(project, aslSession); + ProjectArchiver.archive(project, aslSession); } else { throw new StatAlgoImporterServiceException("No project open!"); } @@ -469,6 +504,7 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements HttpSession session = this.getThreadLocalRequest().getSession(); ASLSession aslSession = SessionUtil.getAslSession(session); logger.debug("PublishSoftware()"); + ArrayList recipients=SessionUtil.getRecipients(session.getServletContext()); Project project = SessionUtil.getProjectSession(session); if (project != null && project.getProjectTarget() != null && project.getProjectTarget().getTargetFolder() != null @@ -477,10 +513,11 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements && project.getProjectTarget().getIntegrationInfo() != null && project.getProjectTarget().getPackageUrl() != null) { AlgorithmNotification notify = new AlgorithmNotification( - aslSession, project); + aslSession, project, recipients); notify.run(); } else { - throw new StatAlgoImporterServiceException("The software was not created correctly try to recreate it!"); + throw new StatAlgoImporterServiceException( + "The software was not created correctly try to recreate it!"); } return; diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java index cfa9c69..06684b7 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java @@ -1,7 +1,6 @@ package org.gcube.portlets.user.statisticalalgorithmsimporter.server.social; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.gcube.application.framework.core.session.ASLSession; @@ -31,17 +30,20 @@ public class AlgorithmNotification extends Thread { private ASLSession aslSession; // private NotificationType notificationType; private Project project; + private ArrayList recipients; - public AlgorithmNotification(ASLSession aslSession, Project project) { + public AlgorithmNotification(ASLSession aslSession, Project project, + ArrayList recipients) { this.aslSession = aslSession; this.project = project; + this.recipients = recipients; // this.notificationType = NotificationType.SAI_ALGORITHM_PUBLICATION; } public void run() { algorithmPublicationEmail(); - } + } // private void algorithmPublicationNotify() { // NotificationsManager nm = new ApplicationNotificationsManager( @@ -100,23 +102,28 @@ public class AlgorithmNotification extends Thread { logger.error("AlgorithmPublicationEmail(): " + e.getLocalizedMessage()); e.printStackTrace(); - + } } private List retrieveRecipients() { - List recipients = new ArrayList(); - recipients.add(new GenericItemBean("gianpaolo.coro", "gianpaolo.coro", - "Gianpaolo" + " " + "Coro", "")); - recipients.add(new GenericItemBean("giancarlo.panichi", - "giancarlo.panichi", "Giancarlo" + " " + "Panichi", "")); + List genericItemBeanRecipients = new ArrayList(); + for (Recipient recipient : recipients) { + genericItemBeanRecipients.add(new GenericItemBean(recipient + .getUser(), recipient.getUser(), recipient.getName() + " " + + recipient.getSurname(), "")); + } - return recipients; + return genericItemBeanRecipients; } private List retrieveListAddressee() { - return Arrays.asList("gianpaolo.coro", "giancarlo.panichi"); + ArrayList addressee = new ArrayList(); + for (Recipient recipient : recipients) { + addressee.add(recipient.getUser()); + } + return addressee; } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/Recipient.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/Recipient.java new file mode 100644 index 0000000..1a49017 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/Recipient.java @@ -0,0 +1,58 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.server.social; + +import java.io.Serializable; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class Recipient implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -3951811134381609022L; + private String user; + private String surname; + private String name; + + public Recipient(String user, String surname, String name) { + super(); + this.user = user; + this.surname = surname; + this.name = name; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Recipient [user=" + user + ", surname=" + surname + ", name=" + + name + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/Constants.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/Constants.java index 7aa8cfe..084d57f 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/Constants.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/Constants.java @@ -17,6 +17,7 @@ public class Constants { public final static String DEFAULT_SCOPE = "/gcube/devsec/devVRE"; public static final String FILE_UPLOADED_FIELD = "FileUploadedField"; public static final String STATISTICAL_ALGORITHMS_IMPORTER_JAR_PUBLIC_LINK = "JarPublicLink"; + public static final String RECIPIENTS = "Recipients"; diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css index b66f36a..4232406 100644 --- a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css +++ b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporter.css @@ -7,5 +7,5 @@ } #drop_target_inner { - background-image: url("images/explorer_dragndrop.png") !important; + background-image: url("statalgoimporter/images/explorer_dragndrop.png") !important; } \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/images/explorer_dragndrop.png b/src/main/webapp/statalgoimporter/images/explorer_dragndrop.png similarity index 100% rename from src/main/webapp/WEB-INF/images/explorer_dragndrop.png rename to src/main/webapp/statalgoimporter/images/explorer_dragndrop.png diff --git a/src/main/webapp/statalgoimporter/properties/NotificationRecipients.txt b/src/main/webapp/statalgoimporter/properties/NotificationRecipients.txt new file mode 100644 index 0000000..4d31103 --- /dev/null +++ b/src/main/webapp/statalgoimporter/properties/NotificationRecipients.txt @@ -0,0 +1,2 @@ +{ "recipients": [ { "user":"giancarlo.panichi", "surname":"Panichi", "name":"Giancarlo"}, +{ "user":"gianpaolo.coro", "surname":"Coro", "name":"Gianpaolo"} ] } \ No newline at end of file