buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/EmailDataSender.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 587 85df38eb4012
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
* All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
* This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
* which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
* Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
* Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
* Description: 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
*/
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.helium.internaldata.ant.listener;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import java.io.ByteArrayOutputStream;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.io.IOException;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    22
import java.util.Hashtable;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    23
import java.util.Properties;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    24
import java.util.zip.GZIPOutputStream;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import javax.activation.DataHandler;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    27
import javax.mail.BodyPart;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    28
import javax.mail.Message;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    29
import javax.mail.MessagingException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    30
import javax.mail.Session;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    31
import javax.mail.Transport;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    32
import javax.mail.internet.InternetAddress;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    33
import javax.mail.internet.MimeBodyPart;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    34
import javax.mail.internet.MimeMessage;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    35
import javax.mail.internet.MimeMultipart;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
import javax.mail.util.ByteArrayDataSource;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    37
import javax.naming.Context;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    38
import javax.naming.NamingEnumeration;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
import javax.naming.NamingException;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    40
import javax.naming.directory.DirContext;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    41
import javax.naming.directory.InitialDirContext;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    42
import javax.naming.directory.SearchControls;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    43
import javax.naming.directory.SearchResult;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
import org.apache.log4j.Logger;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
 * Sends email of the internal data log in a zipped format.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
public class EmailDataSender {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    // The target address
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    public static final String TO_EMAIL = "helium.internaldata@nokia.com";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    // LDAP config
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    public static final String LDAP_URL = "ldap://nedi.europe.nokia.com:389/o=Nokia";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    // Default SMTP server
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    public static final String SMTP_SERVER = "smtp.nokia.com";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    // Configured smtp server address
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    private String smtpServer;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
    // Logger
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    private Logger log = Logger.getLogger(EmailDataSender.class);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
     * Set the smtp server address.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
    public void setSMTPServer(String address) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
        smtpServer = address;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
     * Get the smtp server address.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
    public String getSMTPServer() {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    82
        if (smtpServer != null) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
            return smtpServer;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    84
        }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
        return SMTP_SERVER;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
     * Sending the XML data through email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
    public void sendData(String data) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
            String email = getUserEmail();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
            Properties props = new Properties();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
            props.setProperty("mail.smtp.host", getSMTPServer());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
            Session mailSession = Session.getDefaultInstance(props, null);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
            MimeMessage message = new MimeMessage(mailSession);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
            message.setSubject("[HELIUM]: internal data");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
            MimeMultipart multipart = new MimeMultipart("related");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
            // first part  (the text html content)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
            BodyPart messageBodyPart = new MimeBodyPart();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
            String htmlText = "<H1>Internal data</H1>";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
            messageBodyPart.setContent(htmlText, "text/html");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
            multipart.addBodyPart(messageBodyPart); // add to the multipart
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
            // second part (the data)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
            messageBodyPart = new MimeBodyPart();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
            ByteArrayDataSource dataSrc = gzip(data, "data.xml");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
            messageBodyPart.setFileName(dataSrc.getName());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
            messageBodyPart.setDataHandler(new DataHandler(dataSrc));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
            messageBodyPart.setHeader("Content-ID","<data>");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
            multipart.addBodyPart(messageBodyPart); // add to the multipart
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
            message.setContent(multipart);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
            message.setFrom(new InternetAddress(email));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(TO_EMAIL));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
            log.debug("Sending data.");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
            Transport.send(message);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
        } catch (NamingException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
            // We are Ignoring the errors as no need to fail the build.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
            log.debug("Internal data failure: NamingException " + e.getMessage(), e);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
        } catch (MessagingException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
            // We are Ignoring the errors as no need to fail the build.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
            log.debug("Internal data failure: MessagingException " + e.getMessage(), e);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
        } catch (IOException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
            // We are Ignoring the errors as no need to fail the build.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
            log.debug("Internal data failure: IOException " + e.getMessage(), e);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
     * GZipping a string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
     * @param data the content to be gzipped.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
     * @param filename the name for the file.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
     * @return a ByteArrayDataSource.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
    protected ByteArrayDataSource gzip(String data, String filename) throws IOException {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
        ByteArrayOutputStream out = new ByteArrayOutputStream();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
        GZIPOutputStream gz = new GZIPOutputStream(out);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
        gz.write(data.getBytes());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
        gz.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
        out.close();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
        ByteArrayDataSource dataSrc = new ByteArrayDataSource(out.toByteArray(), "application/x-gzip");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
        dataSrc.setName(filename + ".gz");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
        return dataSrc;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
     * Getting user email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
     * @returns the user email.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
    protected String getUserEmail() throws javax.naming.NamingException {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
        String username = System.getProperty("user.name");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
        // Set up environment for creating initial context
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
        Hashtable<String, String> env = new Hashtable<String, String>(11);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
        env.put(Context.INITIAL_CONTEXT_FACTORY,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
                "com.sun.jndi.ldap.LdapCtxFactory");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
        env.put(Context.PROVIDER_URL, LDAP_URL);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
        // Create initial context
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
        DirContext ctx = new InitialDirContext(env);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
        SearchControls controls = new SearchControls();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
        NamingEnumeration<SearchResult> en = ctx.search("", "uid=" + username, controls);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
        if (en.hasMore()) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
            SearchResult sr = (SearchResult) en.next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
            if (sr.getAttributes().get("mail") != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
                String email = (String) sr.getAttributes().get("mail").get();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
                return email;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
        throw new NamingException("Could not find user email in LDAP.");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
}