Implemented sending mail using spring injection and removed jetty jndi.

Change-Id: Ie88772800a380f488aaf958fdd49398d32898aa8
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java b/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
index 39e9961..904e04e 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
@@ -1,17 +1,12 @@
 package de.ids_mannheim.korap.web;
 
-import javax.naming.InitialContext;
 import javax.servlet.ServletContextListener;
 
 import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.HandlerList;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.eclipse.jetty.webapp.Configuration.ClassList;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.ContextLoaderListener;
 
@@ -67,8 +62,6 @@
         return kargs;
     }
 
-    protected void setupJndi (Server server, WebAppContext webapp){}
-
     protected void start(){
         
         if (kargs.port == -1){
@@ -98,26 +91,9 @@
         
         server.setHandler(contextHandler);
         
-//        ClassList classlist = ClassList.setServerDefault(server);
-//        classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
-//                "org.eclipse.jetty.plus.webapp.EnvConfiguration",
-//                "org.eclipse.jetty.plus.webapp.PlusConfiguration");
-        
-//        WebAppContext webapp = new WebAppContext();
-//        webapp.setDescriptor(KustvaktBaseServer.class.getResource("/WEB-INF/web.xml").toString());
-//        webapp.setContextPath("/");
-//        webapp.setWar("./kustvakt.war");
-//        server.setHandler(webapp);
-//        setupJndi(server, webapp);
-//        HandlerList handlerList = new HandlerList();
-//        handlerList.setHandlers(new Handler[]{webapp,contextHandler});
-//        server.setHandler(handlerList);
-        
         server.setConnectors(new Connector[] { connector });
         try {
             server.start();
-//            InitialContext ic = new InitialContext();
-//            Object object = ic.lookup("mail/Session");
             server.join();
         }
         catch (Exception e) {
diff --git a/full/Changes b/full/Changes
index e3dc087..be40c69 100644
--- a/full/Changes
+++ b/full/Changes
@@ -1,5 +1,5 @@
 version 0.59.10	
-07/02/2018 
+20/02/2018 
 	- added sort VC by id (margaretha)
 	- added test cases regarding VC sharing (margaretha)
 	- implemented withdraw VC from publication (margaretha)
@@ -15,6 +15,9 @@
 	- moved .properties files (margaretha) 
 	- merged changelog file to Changes (margaretha)
 	- updated status codes and error messages to be more detailed (margaretha)
+	- testing mail implementation using embedded jetty jndi (margaretha)
+	- fixed collection rewrite regarding OR operation with other fields (margaretha)
+	- implemented sending mail using spring injection and removed jetty jndi (margaretha) 
 	
 version 0.59.9 
 19/01/2018
diff --git a/full/notification.vm b/full/notification.vm
new file mode 100644
index 0000000..02cf5c6
--- /dev/null
+++ b/full/notification.vm
@@ -0,0 +1,13 @@
+<html>
+	<body>
+		<h3>Hi ${username}, you are invited to group {$group} by ${inviter}!</h3>
+		<p>
+			Login to KorAP to accept or reject the invitation.
+			<br /> 
+			The invitation is valid for 30 minutes.
+		</p>
+		<p>
+			Do not reply! This is an automated generated email.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java b/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
index ad6aaab..4d51c4e 100644
--- a/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
+++ b/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
@@ -17,10 +17,7 @@
     // mail configuration
     private boolean isMailEnabled;
     private String testEmail;
-    private String mailUsername;
-    private String mailPassword;
-    private String mailSmtp;
-    private String mailPort;
+    private String noReply;
 
     private String ldapConfig;
 
@@ -63,13 +60,10 @@
 
     private void setMailConfiguration (Properties properties) {
         setMailEnabled(Boolean.valueOf(properties.getProperty("mail.enabled", "false")));
-        setTestEmail(properties.getProperty("mail.receiver"));
         if (isMailEnabled){
             // other properties must be set in the kustvakt.conf
-            setMailUsername(properties.getProperty("mail.username"));
-            setMailPassword(properties.getProperty("mail.password"));
-            setMailSmtp(properties.getProperty("mail.smtp"));
-            setMailPort(properties.getProperty("mail.port"));
+            setTestEmail(properties.getProperty("mail.receiver"));
+            setNoReply(properties.getProperty("mail.sender"));
         }
     }
 
@@ -248,38 +242,6 @@
         this.testEmail = testEmail;
     }
 
-    public String getMailUsername () {
-        return mailUsername;
-    }
-
-    public void setMailUsername (String mailUsername) {
-        this.mailUsername = mailUsername;
-    }
-
-    public String getMailPassword () {
-        return mailPassword;
-    }
-
-    public void setMailPassword (String mailPassword) {
-        this.mailPassword = mailPassword;
-    }
-
-    public String getMailSmtp () {
-        return mailSmtp;
-    }
-
-    public void setMailSmtp (String mailHost) {
-        this.mailSmtp = mailHost;
-    }
-
-    public String getMailPort () {
-        return mailPort;
-    }
-
-    public void setMailPort (String mailPort) {
-        this.mailPort = mailPort;
-    }
-
     public boolean isMailEnabled () {
         return isMailEnabled;
     }
@@ -288,4 +250,12 @@
         this.isMailEnabled = isMailEnabled;
     }
 
+    public String getNoReply () {
+        return noReply;
+    }
+
+    public void setNoReply (String noReply) {
+        this.noReply = noReply;
+    }
+
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java b/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
index 6871205..b938904 100644
--- a/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
+++ b/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
@@ -5,17 +5,6 @@
 import java.net.URL;
 import java.util.Properties;
 
-import javax.naming.NamingException;
-
-import org.eclipse.jetty.jndi.factories.MailSessionReference;
-import org.eclipse.jetty.plus.jndi.Resource;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.ContextHandler;
-import org.eclipse.jetty.server.handler.ResourceHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.webapp.Configuration.ClassList;
-import org.eclipse.jetty.webapp.WebAppContext;
-
 import de.ids_mannheim.korap.config.FullConfiguration;
 import de.ids_mannheim.korap.web.KustvaktBaseServer;
 
@@ -37,7 +26,7 @@
         
         File f = new File("kustvakt.conf");
         if (!f.exists()){
-            URL url = KustvaktServer.class.getClassLoader().getResource("kustvakt.conf");
+            URL url = KustvaktServer.class.getResource("kustvakt.conf");
             if (url!=null){
                 f = new File(url.toURI());
             }
@@ -63,32 +52,4 @@
                 + "de.ids_mannheim.korap.web.service.full";
         server.start();
     }
-
-    @Override
-    protected void setupJndi(Server server, WebAppContext webapp) {
-        
-        
-//        ClassList classlist = ClassList.setServerDefault(server);
-//        classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
-//                "org.eclipse.jetty.plus.webapp.EnvConfiguration",
-//                "org.eclipse.jetty.plus.webapp.PlusConfiguration");
-        
-        MailSessionReference mailref = new MailSessionReference();
-        mailref.setUser(fullConfig.getMailUsername());
-        mailref.setPassword(fullConfig.getMailPassword());
-        
-        Properties props = new Properties();
-        props.put("mail.smtp.auth", "false");
-        props.put("mail.smtp.host",fullConfig.getMailSmtp());
-        props.put("mail.from",fullConfig.getMailUsername());
-        props.put("mail.debug", "false");
-        mailref.setProperties(props);
-        try {
-            new Resource(webapp, "mail/Session", mailref);
-        }
-        catch (NamingException e) {
-            e.printStackTrace();
-        }
-    }
-    
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java b/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java
new file mode 100644
index 0000000..28e7660
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java
@@ -0,0 +1,20 @@
+package de.ids_mannheim.korap.service;
+
+import javax.mail.Authenticator;
+import javax.mail.PasswordAuthentication;
+
+public class MailAuthenticator extends Authenticator {
+
+    private PasswordAuthentication passwordAuthentication;
+
+    public MailAuthenticator (String username, String password) {
+        passwordAuthentication = new PasswordAuthentication(username, password);
+
+    }
+
+    @Override
+    protected PasswordAuthentication getPasswordAuthentication () {
+        return passwordAuthentication;
+    }
+
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/MailService.java b/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
index 74164d5..75d5176 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
@@ -9,6 +9,8 @@
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.context.Context;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.MimeMessageHelper;
@@ -20,15 +22,19 @@
 
 @Service
 public class MailService {
+    
+    private static Logger jlog =
+            LoggerFactory.getLogger(MailService.class);
+    
     @Autowired
     private AuthenticationManagerIface authManager;
-//    @Autowired
+    @Autowired
     private JavaMailSender mailSender;
-//    @Autowired
+    @Autowired
     private VelocityEngine velocityEngine;
 
     public void sendMemberInvitationNotification (String inviteeName,
-            String groupName, String inviter) {
+            String sender, String groupName, String inviter) {
 
         MimeMessagePreparator preparator = new MimeMessagePreparator() {
 
@@ -38,7 +44,7 @@
 
                 MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
                 message.setTo(new InternetAddress(invitee.getEmail()));
-                message.setFrom("noreply-korap-notification@ids-mannheim.de");
+                message.setFrom(sender);
                 message.setSubject("Invitation to join group");
                 message.setText(prepareText(inviteeName, groupName, inviter),
                         true);
@@ -52,12 +58,20 @@
             String inviter) {
         Context context = new VelocityContext();
         context.put("username", username);
-        context.put("groupName", groupName);
+        context.put("group", groupName);
         context.put("inviter", inviter);
-
+        
         StringWriter stringWriter = new StringWriter();
-        velocityEngine.mergeTemplate("invitationNotification.vm",
-                StandardCharsets.UTF_16.name(), context, stringWriter);
-        return stringWriter.toString();
+//        URL url = getClass().getClassLoader().getResource("notification.vm");
+//        System.out.println(url);
+//        Template t = velocityEngine.getTemplate(url.toString());
+//        System.out.println(t);
+        
+        velocityEngine.mergeTemplate("notification.vm",
+                StandardCharsets.UTF_8.name(), context, stringWriter);
+        
+        String message = stringWriter.toString();
+        jlog.debug(message);
+        return message;
     }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java b/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
index e05053e..d1c9c84 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
@@ -252,7 +252,7 @@
 
         if (config.isMailEnabled()) {
             mailService.sendMemberInvitationNotification(username,
-                    userGroup.getName(), createdBy);
+                    config.getNoReply(), userGroup.getName(), createdBy);
         }
     }
 
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index 8466d6a..5d3f9e9 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-config.xml
@@ -41,9 +41,12 @@
 		<property name="ignoreResourceNotFound" value="true" />
 		<property name="locations">
 			<array>
-				<value>classpath:*/jdbc.properties</value>
+				<value>classpath:properties/jdbc.properties</value>
 				<value>file:./jdbc.properties</value>
-				<value>classpath:*/hibernate.properties</value>
+				<value>classpath:properties/mail.properties</value>
+				<value>file:./mail.properties</value>
+				<value>classpath:properties/hibernate.properties</value>
+				
 				<value>classpath:kustvakt.conf</value>
 				<value>file:./kustvakt.conf</value>
 			</array>
@@ -313,19 +316,34 @@
 	</bean>
 	
 	<!-- mail -->
-	<!-- <bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
-		<property name="jndiName" value="java:comp/env/mail/jetty" />
+		<bean id="authenticator" class="de.ids_mannheim.korap.service.MailAuthenticator">
+		<constructor-arg index="0" value="${mail.username}"/>
+		<constructor-arg index="1" value="${mail.password}"/>
+	</bean>
+	<bean id="smtpSession" class="javax.mail.Session" factory-method="getInstance">
+		<constructor-arg index="0">
+			<props>
+				<prop key="mail.smtp.submitter">${mail.username}</prop>
+				<prop key="mail.smtp.auth">${mail.auth}</prop>
+				<prop key="mail.smtp.host">${mail.host}</prop>
+				<prop key="mail.smtp.port">${mail.port}</prop>
+				<prop key="mail.smtp.starttls.enable">${mail.starttls.enable}</prop>
+				<prop key="mail.smtp.connectiontimeout">${mail.connectiontimeout}</prop>
+			</props>
+		</constructor-arg>
+		<constructor-arg index="1" ref="authenticator"/>
 	</bean>
 	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
+		<property name="username" value="${mail.username}" />
+	    <property name="password" value="${mail.password}" />
 		<property name="session" ref="smtpSession" />
 	</bean>
 	<bean id="velocityEngine" class="org.apache.velocity.app.VelocityEngine">
 		<constructor-arg index="0">
 			<props>
 				<prop key="resource.loader">class</prop>
-				<prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-				</prop>
+				<prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop>
 			</props>
 		</constructor-arg>
-	</bean> -->
+	</bean>
 </beans>
\ No newline at end of file
diff --git a/full/src/main/resources/kustvakt.conf b/full/src/main/resources/kustvakt.conf
index 2e29c02..edb1bce 100644
--- a/full/src/main/resources/kustvakt.conf
+++ b/full/src/main/resources/kustvakt.conf
@@ -10,8 +10,14 @@
 ldap.config = file-path-to-ldap-config
 
 # Kustvakt
+## server
+server.port=8089
+server.host=localhost
+
 ## mail settings
 mail.enabled = false
+mail.receiver = test-email
+mail.sender = noreply@ids-mannheim.de
 
 ## default layers
 default.layer.p = tt
diff --git a/full/src/main/resources/properties/mail.properties b/full/src/main/resources/properties/mail.properties
new file mode 100644
index 0000000..492b322
--- /dev/null
+++ b/full/src/main/resources/properties/mail.properties
@@ -0,0 +1,7 @@
+mail.host = smtp.host
+mail.port = 25
+mail.connectiontimeout = 3000
+mail.auth = true
+mail.starttls.enable = true
+mail.username = username
+mail.password = password
\ No newline at end of file
diff --git a/full/src/test/resources/kustvakt-test.conf b/full/src/test/resources/kustvakt-test.conf
index 7b19a51..aa76a83 100644
--- a/full/src/test/resources/kustvakt-test.conf
+++ b/full/src/test/resources/kustvakt-test.conf
@@ -12,6 +12,8 @@
 # Kustvakt
 ## mail settings
 mail.enabled = false
+mail.receiver = test-email
+mail.sender = noreply@ids-mannheim.de
 
 ## server
 server.port=8089
diff --git a/full/src/test/resources/test-config.xml b/full/src/test/resources/test-config.xml
index 01a5ba8..22da89a 100644
--- a/full/src/test/resources/test-config.xml
+++ b/full/src/test/resources/test-config.xml
@@ -36,6 +36,8 @@
 			<array>
 				<value>classpath:test-jdbc.properties</value>
 				<value>file:./test-jdbc.properties</value>
+				<value>classpath:properties/mail.properties</value>
+				<value>file:./mail.properties</value>
 				<value>classpath:test-hibernate.properties</value>
 				<value>classpath:kustvakt-test.conf</value>
 			</array>
@@ -306,8 +308,22 @@
 	</bean>
 
 	<!-- mail -->
-	<!-- <bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
-		<property name="jndiName" value="java:comp/env/mail/jetty" />
+	<bean id="authenticator" class="de.ids_mannheim.korap.service.MailAuthenticator">
+		<constructor-arg index="0" value="${mail.username}"/>
+		<constructor-arg index="1" value="${mail.password}"/>
+	</bean>
+	<bean id="smtpSession" class="javax.mail.Session" factory-method="getInstance">
+		<constructor-arg index="0">
+			<props>
+				<prop key="mail.smtp.submitter">${mail.username}</prop>
+				<prop key="mail.smtp.auth">${mail.auth}</prop>
+				<prop key="mail.smtp.host">${mail.host}</prop>
+				<prop key="mail.smtp.port">${mail.port}</prop>
+				<prop key="mail.smtp.starttls.enable">${mail.starttls.enable}</prop>
+				<prop key="mail.smtp.connectiontimeout">${mail.connectiontimeout}</prop>
+			</props>
+		</constructor-arg>
+		<constructor-arg index="1" ref="authenticator"/>
 	</bean>
 	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
 		<property name="session" ref="smtpSession" />
@@ -320,5 +336,5 @@
 				</prop>
 			</props>
 		</constructor-arg>
-	</bean> -->
+	</bean>
 </beans>
\ No newline at end of file