You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/12/20 17:10:30 UTC
svn commit: r1552715 - in
/manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email:
EmailConnector.java EmailSession.java
Author: kwright
Date: Fri Dec 20 16:10:30 2013
New Revision: 1552715
URL: http://svn.apache.org/r1552715
Log:
Separate session management into a new class.
Added:
manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailSession.java (with props)
Modified:
manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailConnector.java
Modified: manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailConnector.java?rev=1552715&r1=1552714&r2=1552715&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailConnector.java (original)
+++ manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailConnector.java Fri Dec 20 16:10:30 2013
@@ -70,14 +70,18 @@ public class EmailConnector extends org.
// Local variables.
protected long sessionExpiration = -1L;
+
+ // Parameters for establishing a session
+
protected String server = null;
protected String port = null;
protected String username = null;
protected String password = null;
protected String protocol = null;
- protected Map<String, String> properties = new HashMap<String,String>();
- private Session session = null;
- private Store store = null;
+ protected Properties properties = new Properties();
+
+ // Local session handle
+ protected EmailSession session = null;
private static Map<String,String> providerMap;
static
@@ -111,7 +115,7 @@ public class EmailConnector extends org.
if (cn.getType().equals(EmailConfig.NODE_PROPERTIES)) {
String findParameterName = cn.getAttributeValue(EmailConfig.ATTRIBUTE_NAME);
String findParameterValue = cn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
- this.properties.put(findParameterName, findParameterValue);
+ this.properties.setProperty(findParameterName, findParameterValue);
}
}
}
@@ -169,10 +173,11 @@ public class EmailConnector extends org.
finalizeConnection();
getSession();
try {
- Folder defaultFolder = store.getDefaultFolder();
+ Folder defaultFolder = session.openDefaultFolder();
if (defaultFolder == null) {
throw new ManifoldCFException("Error checking the connection: No default folder.");
}
+ session.closeFolder(defaultFolder);
} catch (MessagingException e) {
handleMessagingException(e,"checking the connection");
}
@@ -256,8 +261,10 @@ public class EmailConnector extends org.
public void addSeedDocuments(ISeedingActivity activities,
DocumentSpecification spec, long startTime, long endTime, int jobMode)
throws ManifoldCFException, ServiceInterruption {
+
getSession();
- int i = 0, j = 0;
+
+ int i = 0;
Map<String,String> findMap = new HashMap<String,String>();
List<String> folderNames = new ArrayList<String>();
while (i < spec.getChildCount()) {
@@ -277,7 +284,7 @@ public class EmailConnector extends org.
for (String folderName : folderNames)
{
try {
- Folder folder = openFolder(folderName);
+ Folder folder = session.openFolder(folderName);
try
{
Message[] messages = findMessages(folder, startTime, endTime, findMap);
@@ -288,7 +295,7 @@ public class EmailConnector extends org.
}
finally
{
- folder.close(false);
+ session.closeFolder(folder);
}
} catch (MessagingException e) {
handleMessagingException(e, "finding emails");
@@ -297,14 +304,6 @@ public class EmailConnector extends org.
}
- private Folder openFolder(String folderName)
- throws MessagingException
- {
- Folder thisFolder = store.getFolder(folderName);
- thisFolder.open(Folder.READ_ONLY);
- return thisFolder;
- }
-
/*
This method will return the list of messages which matches the given criteria
*/
@@ -348,27 +347,18 @@ public class EmailConnector extends org.
Message[] result;
if (searchTerm == null)
- result = folder.getMessages();
+ result = session.getMessages(folder);
else
- result = folder.search(searchTerm);
+ result = session.search(folder, searchTerm);
return result;
}
- private void getSession()
+ protected void getSession()
throws ManifoldCFException, ServiceInterruption {
if (session == null) {
- // Create empty properties
- Properties props = new Properties();
- // Get session
try {
- Session thisSession = Session.getDefaultInstance(props, null);
- Store thisStore = thisSession.getStore(providerMap.get(protocol));
- thisStore.connect(server, username, password);
-
-
- session = thisSession;
- store = thisStore;
-
+ session = new EmailSession(server, port, username, password,
+ providerMap.get(protocol), properties);
} catch (MessagingException e) {
handleMessagingException(e, "connecting");
}
@@ -376,15 +366,15 @@ public class EmailConnector extends org.
sessionExpiration = System.currentTimeMillis() + EmailConfig.SESSION_EXPIRATION_MILLISECONDS;
}
- private void finalizeConnection() {
- try {
- if (store != null)
- store.close();
- } catch (MessagingException e) {
- Logging.connectors.warn("Error while closing connection to server: " + e.getMessage(),e);
- } finally {
- store = null;
- session = null;
+ protected void finalizeConnection() {
+ if (session != null) {
+ try {
+ session.close();
+ } catch (MessagingException e) {
+ Logging.connectors.warn("Error while closing connection to server: " + e.getMessage(),e);
+ } finally {
+ session = null;
+ }
}
}
@@ -475,7 +465,7 @@ public class EmailConnector extends org.
Folder folder = openFolders.get(folderName);
if (folder == null)
{
- folder = openFolder(folderName);
+ folder = session.openFolder(folderName);
openFolders.put(folderName,folder);
}
@@ -487,7 +477,8 @@ public class EmailConnector extends org.
MessageIDTerm messageIDTerm = new MessageIDTerm(id);
Message[] message = null;
- message = folder.search(messageIDTerm);
+ message = session.search(folder, messageIDTerm);
+
for (Message msg : message) {
RepositoryDocument rd = new RepositoryDocument();
Date setDate = msg.getSentDate();
@@ -585,7 +576,7 @@ public class EmailConnector extends org.
{
try
{
- f.close(false);
+ session.closeFolder(f);
}
catch (MessagingException e)
{
@@ -1031,23 +1022,15 @@ public class EmailConnector extends org.
throws ManifoldCFException, ServiceInterruption
{
getSession();
- List<String> folderList = new ArrayList<String>();
try
{
- Folder[] folders = store.getDefaultFolder().list("*");
- for (Folder folder : folders)
- {
- if ((folder.getType() & Folder.HOLDS_MESSAGES) != 0)
- folderList.add(folder.getFullName());
- }
+ return session.listFolders();
}
catch (MessagingException e)
{
handleMessagingException(e,"getting folder list");
+ return null;
}
- String[] rval = folderList.toArray(new String[0]);
- java.util.Arrays.sort(rval);
- return rval;
}
Added: manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailSession.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailSession.java?rev=1552715&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailSession.java (added)
+++ manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailSession.java Fri Dec 20 16:10:30 2013
@@ -0,0 +1,134 @@
+/**
+* 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.manifoldcf.crawler.connectors.email;
+
+import java.io.*;
+import java.util.*;
+import javax.mail.*;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.search.*;
+
+/** This class represents a raw email session, without any protection
+* from threads waiting on sockets, etc.
+*/
+public class EmailSession
+{
+ protected final String server;
+ protected final String port;
+ protected final String username;
+ protected final String password;
+ protected final String protocol;
+ protected final Properties properties;
+
+ private Session session = null;
+ private Store store = null;
+
+ /** Create a session */
+ public EmailSession(String server, String port, String username, String password,
+ String protocol, Properties properties)
+ throws MessagingException
+ {
+ this.server = server;
+ this.port = port;
+ this.username = username;
+ this.password = password;
+ this.protocol = protocol;
+ this.properties = properties;
+
+ // Now, try to connect
+ Session thisSession = Session.getDefaultInstance(properties, null);
+ Store thisStore = thisSession.getStore(protocol);
+ thisStore.connect(server, username, password);
+
+ session = thisSession;
+ store = thisStore;
+ }
+
+ public String[] listFolders()
+ throws MessagingException
+ {
+ if (store != null)
+ {
+ List<String> folderList = new ArrayList<String>();
+ Folder[] folders = store.getDefaultFolder().list("*");
+ for (Folder folder : folders)
+ {
+ if ((folder.getType() & Folder.HOLDS_MESSAGES) != 0)
+ folderList.add(folder.getFullName());
+ }
+ String[] rval = folderList.toArray(new String[0]);
+ java.util.Arrays.sort(rval);
+ return rval;
+ }
+ return null;
+ }
+
+ public Folder openDefaultFolder()
+ throws MessagingException
+ {
+ if (store != null)
+ {
+ Folder thisFolder = store.getDefaultFolder();
+ thisFolder.open(Folder.READ_ONLY);
+ return thisFolder;
+ }
+ return null;
+ }
+
+ public Folder openFolder(String folderName)
+ throws MessagingException
+ {
+ if (store != null)
+ {
+ Folder thisFolder = store.getFolder(folderName);
+ thisFolder.open(Folder.READ_ONLY);
+ return thisFolder;
+ }
+ return null;
+ }
+
+ public void closeFolder(Folder folder)
+ throws MessagingException
+ {
+ folder.close(false);
+ }
+
+ public Message[] getMessages(Folder folder)
+ throws MessagingException
+ {
+ return folder.getMessages();
+ }
+
+ public Message[] search(Folder folder, SearchTerm searchTerm)
+ throws MessagingException
+ {
+ return folder.search(searchTerm);
+ }
+
+ public void close()
+ throws MessagingException
+ {
+ if (store != null)
+ {
+ store.close();
+ store = null;
+ }
+ session = null;
+ }
+}
\ No newline at end of file
Propchange: manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailSession.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: manifoldcf/branches/CONNECTORS-553/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/email/EmailSession.java
------------------------------------------------------------------------------
svn:keywords = Id