From b394c718c1fc931bdf12f5ba6170d0e03b822d3f Mon Sep 17 00:00:00 2001 From: mguessan Date: Tue, 2 Dec 2008 10:20:46 +0000 Subject: [PATCH] Various fixes and cleanup from FindBugs audit git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@189 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- pom.xml | 1 + src/java/davmail/caldav/CaldavConnection.java | 8 +-- src/java/davmail/caldav/CaldavServer.java | 4 +- .../davmail/exchange/ExchangeSession.java | 52 ++++++------------ src/java/davmail/exchange/XMLStreamUtil.java | 54 +++++++++++++++++++ .../http/DavGatewayHttpClientFacade.java | 3 ++ src/java/davmail/pop/PopConnection.java | 2 +- src/java/davmail/ui/SettingsFrame.java | 4 +- src/java/davmail/ui/SwtDesktopBrowser.java | 3 ++ 9 files changed, 85 insertions(+), 46 deletions(-) create mode 100644 src/java/davmail/exchange/XMLStreamUtil.java diff --git a/pom.xml b/pom.xml index 736b071f..10f926fc 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ Mickaël Guessant + mguessan mguessan@free.fr http://mguessan.free.fr diff --git a/src/java/davmail/caldav/CaldavConnection.java b/src/java/davmail/caldav/CaldavConnection.java index 930f91c3..268c494e 100644 --- a/src/java/davmail/caldav/CaldavConnection.java +++ b/src/java/davmail/caldav/CaldavConnection.java @@ -68,7 +68,7 @@ public class CaldavConnection extends AbstractConnection { } protected void setSocketTimeout(String keepAliveValue) throws IOException { - if (keepAliveValue != null || keepAliveValue.length() > 0) { + if (keepAliveValue != null && keepAliveValue.length() > 0) { int keepAlive; try { keepAlive = Integer.parseInt(keepAliveValue); @@ -320,7 +320,7 @@ public class CaldavConnection extends AbstractConnection { String line; String key = null; while ((line = reader.readLine()) != null) { - if (line.startsWith(" ") & "ATTENDEE".equals(key)) { + if (line.startsWith(" ") && "ATTENDEE".equals(key)) { valueMap.put(key, valueMap.get(key)+line.substring(1)); } else { int index = line.indexOf(':'); @@ -411,8 +411,8 @@ public class CaldavConnection extends AbstractConnection { SimpleDateFormat formatter = new java.text.SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH); sendClient("Date: " + formatter.format(new java.util.Date())); if (headers != null) { - for (String header : headers.keySet()) { - sendClient(header + ": " + headers.get(header)); + for (Map.Entry header : headers.entrySet()) { + sendClient(header.getKey() + ": " + header.getValue()); } } if (contentType != null) { diff --git a/src/java/davmail/caldav/CaldavServer.java b/src/java/davmail/caldav/CaldavServer.java index e9c55866..d964a34e 100644 --- a/src/java/davmail/caldav/CaldavServer.java +++ b/src/java/davmail/caldav/CaldavServer.java @@ -1,8 +1,7 @@ package davmail.caldav; -import davmail.AbstractServer; import davmail.AbstractConnection; -import davmail.pop.PopConnection; +import davmail.AbstractServer; import java.io.IOException; import java.net.Socket; @@ -16,6 +15,7 @@ public class CaldavServer extends AbstractServer { /** * Create a ServerSocket to listen for connections. * Start the thread. + * * @param port pop listen port, 80 if not defined (0) * @throws java.io.IOException on error */ diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index 58aa5f46..9aa67af0 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -158,7 +158,7 @@ public class ExchangeSession { protected HttpMethod formLogin(HttpClient httpClient, HttpMethod initmethod, String userName, String password) throws IOException { LOGGER.debug("Form based authentication detected"); - // build logon method with actual destination (baseUrl) + HttpMethod logonMethod = buildLogonMethod(httpClient, initmethod); ((PostMethod) logonMethod).addParameter("username", userName); ((PostMethod) logonMethod).addParameter("password", password); @@ -548,22 +548,23 @@ public class ExchangeSession { String subject = "davmailtemp"; String line = reader.readLine(); StringBuffer mailBuffer = new StringBuffer(); - while (!".".equals(line)) { + while (line != null && !".".equals(line)) { mailBuffer.append(line); mailBuffer.append("\n"); line = reader.readLine(); - // patch thunderbird html in reply for correct outlook display - if (line.startsWith("")) { - line += "\n "; - } - if (line.startsWith("Subject")) { - subject = MimeUtility.decodeText(line.substring(8).trim()); - // '/' is invalid as message URL - subject = subject.replaceAll("/", "_xF8FF_"); - // '?' is also invalid - subject = subject.replaceAll("\\?", ""); - // TODO : test & in subject + if (line != null) { + // patch thunderbird html in reply for correct outlook display + if (line.startsWith("")) { + line += "\n "; + } else if (line.startsWith("Subject")) { + subject = MimeUtility.decodeText(line.substring(8).trim()); + // '/' is invalid as message URL + subject = subject.replaceAll("/", "_xF8FF_"); + // '?' is also invalid + subject = subject.replaceAll("\\?", ""); + // TODO : test & in subject + } } } @@ -627,7 +628,7 @@ public class ExchangeSession { return folder; } - public class Folder { + public static class Folder { public String folderUrl; public int childCount; public int unreadCount; @@ -953,29 +954,8 @@ public class ExchangeSession { if (status != HttpStatus.SC_OK) { throw new IOException("Unable to get user email from: " + getMethod.getPath()); } - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); - inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); - inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.TRUE); - - reader = inputFactory.createXMLStreamReader(getMethod.getResponseBodyAsStream()); - boolean inEM = false; - while (reader.hasNext()) { - int event = reader.next(); - if (event == XMLStreamConstants.START_ELEMENT && "EM".equals(reader.getLocalName())) { - inEM = true; - } else if (event == XMLStreamConstants.CHARACTERS && inEM) { - email = reader.getText(); - inEM = false; - } - } - } catch (XMLStreamException e) { - throw new IOException(e.getMessage()); + email = XMLStreamUtil.getElementContentByLocalName(getMethod.getResponseBodyAsStream(), "EM"); } finally { - try { - reader.close(); - } catch (XMLStreamException e) { - LOGGER.error(e); - } getMethod.releaseConnection(); } if (email == null) { diff --git a/src/java/davmail/exchange/XMLStreamUtil.java b/src/java/davmail/exchange/XMLStreamUtil.java new file mode 100644 index 00000000..b0ecd5dd --- /dev/null +++ b/src/java/davmail/exchange/XMLStreamUtil.java @@ -0,0 +1,54 @@ +package davmail.exchange; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import java.io.IOException; +import java.io.InputStream; + +/** + * XmlStreamReader utility methods + */ +public class XMLStreamUtil { + private XMLStreamUtil() { + } + + public static XMLInputFactory getXmlInputFactory() { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE); + inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.TRUE); + return inputFactory; + } + + public static String getElementContentByLocalName(InputStream inputStream, String localName) throws IOException { + String elementContent = null; + XMLStreamReader reader = null; + try { + XMLInputFactory inputFactory = getXmlInputFactory(); + + reader = inputFactory.createXMLStreamReader(inputStream); + boolean inElement = false; + while (reader.hasNext()) { + int event = reader.next(); + if (event == XMLStreamConstants.START_ELEMENT && localName.equals(reader.getLocalName())) { + inElement = true; + } else if (event == XMLStreamConstants.CHARACTERS && inElement) { + elementContent = reader.getText(); + inElement = false; + } + } + } catch (XMLStreamException e) { + throw new IOException(e.getMessage()); + } finally { + try { + if (reader != null) { + reader.close(); + } + } catch (XMLStreamException e) { + ExchangeSession.LOGGER.error(e); + } + } + return elementContent; + } +} diff --git a/src/java/davmail/http/DavGatewayHttpClientFacade.java b/src/java/davmail/http/DavGatewayHttpClientFacade.java index e7a8099a..a230115e 100644 --- a/src/java/davmail/http/DavGatewayHttpClientFacade.java +++ b/src/java/davmail/http/DavGatewayHttpClientFacade.java @@ -21,6 +21,9 @@ public class DavGatewayHttpClientFacade { System.getProperties().setProperty("httpclient.useragent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); } + private DavGatewayHttpClientFacade() { + } + /** * Create a configured HttpClient instance. * diff --git a/src/java/davmail/pop/PopConnection.java b/src/java/davmail/pop/PopConnection.java index 32fc3ec5..3fb30609 100644 --- a/src/java/davmail/pop/PopConnection.java +++ b/src/java/davmail/pop/PopConnection.java @@ -252,7 +252,7 @@ public class PopConnection extends AbstractConnection { /** * Filter to limit output lines to max body lines after header */ - private class TopOutputStream extends FilterOutputStream { + private static class TopOutputStream extends FilterOutputStream { protected static final int START = 0; protected static final int CR = 1; protected static final int CRLF = 2; diff --git a/src/java/davmail/ui/SettingsFrame.java b/src/java/davmail/ui/SettingsFrame.java index 16bd424f..6ed6a75e 100644 --- a/src/java/davmail/ui/SettingsFrame.java +++ b/src/java/davmail/ui/SettingsFrame.java @@ -9,14 +9,12 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.net.URI; -import java.net.URISyntaxException; /** * DavMail settings frame */ public class SettingsFrame extends JFrame { - public static final Level[] LOG_LEVELS = {Level.OFF, Level.FATAL, Level.ERROR, Level.WARN, Level.INFO, Level.DEBUG, Level.ALL}; + static final Level[] LOG_LEVELS = {Level.OFF, Level.FATAL, Level.ERROR, Level.WARN, Level.INFO, Level.DEBUG, Level.ALL}; protected JTextField urlField; protected JTextField popPortField; diff --git a/src/java/davmail/ui/SwtDesktopBrowser.java b/src/java/davmail/ui/SwtDesktopBrowser.java index 8d351bb3..f0e640a2 100644 --- a/src/java/davmail/ui/SwtDesktopBrowser.java +++ b/src/java/davmail/ui/SwtDesktopBrowser.java @@ -9,6 +9,9 @@ import java.net.URI; * Wrapper class to call SWT Program class to launch default browser. */ public class SwtDesktopBrowser { + private SwtDesktopBrowser() { + } + public static void browse(URI location) throws IOException { Program.launch(location.toString()); }