Author: reto
Date: Fri Jun  4 11:43:47 2010
New Revision: 951382

URL: http://svn.apache.org/viewvc?rev=951382&view=rev
Log:
CLEREZZA-36: extracting SesseionFactory, deprecated methods

Added:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailSessionFactory.java
Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailMan.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailManImpl.java

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailMan.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailMan.java?rev=951382&r1=951381&r2=951382&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailMan.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailMan.java
 Fri Jun  4 11:43:47 2010
@@ -26,9 +26,9 @@ import org.apache.clerezza.rdf.utils.Gra
 
 
 /**
- * Subclasses of this interface provide methods for sending emails and 
- * especially emails to platform users.
- *
+ * Implementations provide methods for sending emails, in particular to 
platform
+ * users.
+ * 
  * @author mir
  */
 public interface MailMan {
@@ -121,11 +121,33 @@ public interface MailMan {
         * but not visible to other recipients.
         * @param subject the subject of the message
         * @param message the message to be sent
+        * @deprecated use javax.mail with the session returned by 
MailSessionFactory
         */
+       @Deprecated
        public void sendEmail(InternetAddress from, InternetAddress to,
                        InternetAddress[] cc, InternetAddress[] bcc, String 
subject,
                        String message) throws MessagingException;
-       
+
+       /**
+     * Sends an message with the specified subject to the specified
+     * <code>Adress</code> to and carbon copies to the <code>Adress<code>es
+     * cc and bcc (Not visible to other recipients). Cc and bcc can be null, 
all
+     * other parameter has to be specified.
+     * @author oliver straesser
+     * @param from sender address
+     * @param to recipient address
+     * @param cc addresess to which copies of the message will be sent to
+     * @param bcc addreses to which copies of the message will be sent to,
+     * but not visible to other recipients.
+     * @param subject the subject of the message
+     * @param message the message to be sent
+        * @deprecated use javax.mail with the session returned by 
MailSessionFactory
+     */
+       @Deprecated
+    public void sendEmail(InternetAddress from, InternetAddress to,
+            InternetAddress[] cc, InternetAddress[] bcc, String subject,
+            String message, String mediaType) throws MessagingException;
+
        /**
         * Sends the rendered <code>GraphNode</code> with the specified subject 
to the specified
         * <code>Adress</code> to and carbon copies to the <code>Adress<code>es

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailManImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailManImpl.java?rev=951382&r1=951381&r2=951382&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailManImpl.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailManImpl.java
 Fri Jun  4 11:43:47 2010
@@ -24,19 +24,15 @@ import java.security.PrivilegedException
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
-import java.util.Properties;
 
-import javax.mail.Authenticator;
 import javax.mail.Message;
 import javax.mail.MessagingException;
-import javax.mail.PasswordAuthentication;
 import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.AddressException;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import javax.ws.rs.core.MediaType;
-import org.osgi.service.component.ComponentContext;
 import org.apache.clerezza.platform.typerendering.Renderer;
 import org.apache.clerezza.platform.typerendering.RendererFactory;
 import org.apache.clerezza.rdf.core.MGraph;
@@ -50,82 +46,35 @@ import org.apache.clerezza.rdf.core.spar
 import org.apache.clerezza.rdf.ontologies.FOAF;
 import org.apache.clerezza.rdf.ontologies.PLATFORM;
 import org.apache.clerezza.rdf.utils.GraphNode;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
 
 /**
- * @scr.component
- * @scr.service interface="org.apache.clerezza.platform.mail.MailMan"
+ *
+ * Implementation of <code>MailMan</code> providing  utility methods to send
+ * emails rendering GraphNodes
  *
  * @author mir, daniel
  */
+...@component
+...@service(MailMan.class)
+...@reference
 public class MailManImpl implements MailMan {
 
-       /**
-        * Service property
-        *
-        * @scr.property value="false"
-        *               description="Specifies if TLS (SSL) encryption is 
used."
-        */
-       public static final String MAIL_USE_TLS = "useTLS";
-       /**
-        * Service property
-        *
-        * @scr.property value="smtp.myHost.org"
-        *               description="Specifies the SMTP host."
-        */
-       public static final String MAIL_SMTP_HOST = "smtpHost";
-       /**
-        * Service property
-        *
-        * @scr.property value="25" description="Specifies the SMTP port."
-        */
-       public static final String MAIL_SMTP_PORT = "smtpPort";
-       /**
-        * Service property
-        *
-        * @scr.property value="myPassword" description=
-        *               "Specifies the authentication password (plain text) 
for SMTP."
-        */
-       public static final String MAIL_SMTP_PASSWORD = "smtpPassword";
-       /**
-        * Service property
-        *
-        * @scr.property value="myUserName"
-        *               description="Specifies the User to authenticate for 
SMTP."
-        */
-       public static final String MAIL_SMTP_USER = "smtpUser";
-       private Properties properties;
-       /**
-        * @scr.reference
-        */
+       @Reference
        private TcManager tcManager;
 
-       /**
-        * @scr.reference
-        */
+       @Reference
        RendererFactory rendererFactory;
 
+       @Reference
+       MailSessionFactory mailSessionFactory;
+
 
        private static String SYSTEM_GRAPH_URI = 
"http://tpf.localhost/system.graph";;
        private UriRef systemGraphUri = new UriRef(SYSTEM_GRAPH_URI);
 
-       protected void activate(ComponentContext componentContext) {
-               properties = new Properties();
-
-               properties.setProperty("mail.debug", "false");
-
-               if (((String) 
componentContext.getProperties().get(MAIL_USE_TLS)).equals("true")) {
-                       properties.setProperty("mail.smtp.starttls.enable", 
"true");
-                       properties.setProperty("mail.smtp.auth", "true");
-                       
properties.setProperty("mail.smtp.socketFactory.fallback", "false");
-               }
-
-               properties.setProperty("mail.transport.protocol", "smtp");
-               properties.setProperty("mail.smtp.port", (String) 
componentContext.getProperties().get(MAIL_SMTP_PORT));
-               properties.setProperty("mail.smtp.host", (String) 
componentContext.getProperties().get(MAIL_SMTP_HOST));
-               properties.setProperty("smtpUser", (String) 
componentContext.getProperties().get(MAIL_SMTP_USER));
-               properties.setProperty("smtpPassword", (String) 
componentContext.getProperties().get(MAIL_SMTP_PASSWORD));
-       }
-
        @Override
        public void sendEmailToUser(final String fromUser, final String toUser,
                        final String subject, final String message) throws 
MessagingException {
@@ -206,7 +155,6 @@ public class MailManImpl implements Mail
                }
        }
 
-
        @Override
        public void sendEmailToUsers(final String fromUser, final String[] 
toUsers,
                        final String subject, final GraphNode graphNode,
@@ -256,36 +204,35 @@ public class MailManImpl implements Mail
                sendEmail(from, to, cc, bcc, subject, message, "text/plain", 
null, null);
        }
 
-       public void sendEmail(final InternetAddress from,final InternetAddress 
to,
-                       final InternetAddress[] cc,     final InternetAddress[] 
bcc,
-                       final String subject, final Object content,     final 
String mediaType,
-                       final List<MediaType> acceptableMediaTypes,     final 
String mode)
+       @Override
+    public void sendEmail(InternetAddress from, InternetAddress to,
+            InternetAddress[] cc, InternetAddress[] bcc, String subject,
+            String message, String mediaType) throws MessagingException {
+        AccessController.checkPermission(
+                new MailManPermission("", MailManPermission.SEND_MAIL));
+        sendEmail(from, to, cc, bcc, subject, message, mediaType, null, null);
+    }
+
+       private void sendEmail(final InternetAddress from, final 
InternetAddress to,
+                       final InternetAddress[] cc, final InternetAddress[] bcc,
+                       final String subject, final Object content, final 
String mediaType,
+                       final List<MediaType> acceptableMediaTypes, final 
String mode)
                        throws MessagingException {
+               final Session session = mailSessionFactory.getSession();
                try {
                        AccessController.doPrivileged(new 
PrivilegedExceptionAction<Object>() {
 
                                @Override
                                public Object run() throws MessagingException {
-                                       Authenticator auth = new 
Authenticator() {
-
-                                               @Override
-                                               public PasswordAuthentication 
getPasswordAuthentication() {
-                                                       return new 
PasswordAuthentication(properties.
-                                                                       
getProperty("smtpUser"),
-                                                                       
properties.getProperty("smtpPassword"));
-                                               }
-                                       };
-                                       Session session = 
Session.getInstance(properties, auth);
                                        MimeMessage mimeMessage = new 
MimeMessage(session);
                                        Date date = new Date();
                                        mimeMessage.setSentDate(date);
                                        mimeMessage.setSubject(subject);
                                        if (content instanceof GraphNode) {
                                                GraphNode graphNode = 
(GraphNode) content;
-                                               Renderer renderer = 
rendererFactory.
-                                                       
createRenderer(graphNode, mode, 
-                                                       acceptableMediaTypes == 
null ? Collections.singletonList(
-                                                       
MediaType.WILDCARD_TYPE) : acceptableMediaTypes);
+                                               Renderer renderer = 
rendererFactory.createRenderer(graphNode, mode,
+                                                               
acceptableMediaTypes == null ? Collections.singletonList(
+                                                               
MediaType.WILDCARD_TYPE) : acceptableMediaTypes);
                                                if (renderer == null) {
                                                        throw new 
MessagingException("No renderer appropriate found");
                                                }
@@ -318,19 +265,21 @@ public class MailManImpl implements Mail
 
        }
 
+
        private InternetAddress getUserAddress(String user) throws 
MessagingException {
                MGraph systemGraph = tcManager.getMGraph(systemGraphUri);
 
-               final String queryString = "SELECT ?email WHERE { " +
-                               "?x " + FOAF.mbox + " ?email . " +
-                               "?x " + PLATFORM.userName + " \"" + user + "\" 
. " +
-                               "}";
+               final String queryString = "SELECT ?email WHERE { "
+                               + "?x " + FOAF.mbox + " ?email . "
+                               + "?x " + PLATFORM.userName + " \"" + user + 
"\" . "
+                               + "}";
                try {
                        SelectQuery selectQuery = (SelectQuery) 
QueryParser.getInstance().parse(queryString);
                        ResultSet result = 
tcManager.executeSparqlQuery(selectQuery, systemGraph);
                        if (result.hasNext()) {
                                Resource email = result.next().get("email");
                                String emailString = ((UriRef) 
email).getUnicodeString();
+                               //TODO should add personal name (if available) 
as well
                                return new 
InternetAddress(emailString.substring("mailto:".length()));
                        }
                } catch (ParseException ex) {

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailSessionFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailSessionFactory.java?rev=951382&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailSessionFactory.java
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.mail/src/main/java/org/apache/clerezza/platform/mail/MailSessionFactory.java
 Fri Jun  4 11:43:47 2010
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.clerezza.platform.mail;
+
+
+import java.util.Properties;
+import javax.mail.Authenticator;
+import javax.mail.PasswordAuthentication;
+import javax.mail.Session;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * Provides an isntance of javax.mail.Session matching the configuration of 
this 
+ * service.
+ *
+ * @author reto
+ */
+...@component
+...@service(MailSessionFactory.class)
+public class MailSessionFactory {
+       /**
+        * Service property
+        *
+        * @scr.property value="false"
+        *               description="Specifies if TLS (SSL) encryption is 
used."
+        */
+       public static final String MAIL_USE_TLS = "useTLS";
+       /**
+        * Service property
+        *
+        * @scr.property value="smtp.myHost.org"
+        *               description="Specifies the SMTP host."
+        */
+       public static final String MAIL_SMTP_HOST = "smtpHost";
+       /**
+        * Service property
+        *
+        * @scr.property value="25" description="Specifies the SMTP port."
+        */
+       public static final String MAIL_SMTP_PORT = "smtpPort";
+       /**
+        * Service property
+        *
+        * @scr.property value="myPassword" description=
+        *               "Specifies the authentication password (plain text) 
for SMTP."
+        */
+       public static final String MAIL_SMTP_PASSWORD = "smtpPassword";
+       /**
+        * Service property
+        *
+        * @scr.property value="myUserName"
+        *               description="Specifies the User to authenticate for 
SMTP."
+        */
+       public static final String MAIL_SMTP_USER = "smtpUser";
+
+       private Properties properties;
+
+       protected void activate(ComponentContext componentContext) {
+               properties = new Properties();
+               properties.setProperty("mail.debug", "false");
+               if (((String) 
componentContext.getProperties().get(MAIL_USE_TLS)).equals("true")) {
+                       properties.setProperty("mail.smtp.starttls.enable", 
"true");
+                       properties.setProperty("mail.smtp.auth", "true");
+                       
properties.setProperty("mail.smtp.socketFactory.fallback", "false");
+               }
+               properties.setProperty("mail.transport.protocol", "smtp");
+               properties.setProperty("mail.smtp.port", (String) 
componentContext.getProperties().get(MAIL_SMTP_PORT));
+               properties.setProperty("mail.smtp.host", (String) 
componentContext.getProperties().get(MAIL_SMTP_HOST));
+               properties.setProperty("smtpUser", (String) 
componentContext.getProperties().get(MAIL_SMTP_USER));
+               properties.setProperty("smtpPassword", (String) 
componentContext.getProperties().get(MAIL_SMTP_PASSWORD));
+       }
+
+       public Session getSession() {
+               Authenticator auth = new Authenticator() {
+                       @Override
+                       public PasswordAuthentication 
getPasswordAuthentication() {
+                               return new PasswordAuthentication(properties.
+                                               getProperty("smtpUser"),
+                                               
properties.getProperty("smtpPassword"));
+                       }
+               };
+               return Session.getInstance(properties, auth);
+       }
+}


Reply via email to