Code formating and whitespace cleanup
[jpim.git] / src / de / j32 / pimstuff / conduit / FritzAddressbookImporter.java
index f434185..a67d975 100644 (file)
@@ -9,67 +9,77 @@ import org.xml.sax.SAXException;
 
 import de.j32.pimstuff.data.Entry;
 import de.j32.pimstuff.data.EntryConsumer;
-import de.j32.util.Util;
 import de.j32.util.XmlUtil;
 
-public class FritzAddressbookImporter
-       implements Importer
+public class FritzAddressbookImporter implements Importer
 {
-       Document xml_;
-       
-       public FritzAddressbookImporter(InputStream is)
-               throws SAXException, IOException
-       {
-               try {
-                       xml_ = XmlUtil.parse(is);
-                       is.close();
-                       is = null;
-               }
-               finally {
-                       Util.nothrowClose(is);
-               }
-       }
-       
-       @Override
-       public void sendTo(EntryConsumer consumer)
-       {
-               for (Element node : XmlUtil.iterate(xml_.getElementsByTagName("contact"),Element.class)) {
-                       /* subnodes:
-                        *   category (unused, always 0)
-                        *   person/realName
-                        *   person/imageURL
-                        *   telephony/number (@prio, @type, @vanity)
-                        *   services/email
-                        *   mod_time
-                        */
-                       Entry entry = new Entry();
+    Document xml_;
 
-                       try {
-                               entry.name(node.getElementsByTagName("realName").item(0).getTextContent());
+    /**
+     * Importer reading Addressbook from Fritzbox XML file
+     * 
+     * @param is InputStream providing the XML data. <em>After successful</em>
+     *            construction, the class takes responsibility for closing the
+     *            stream.
+     * @throws SAXException
+     * @throws IOException
+     */
+    public FritzAddressbookImporter(InputStream is) throws SAXException,
+            IOException
+    {
+        // It does not make sens to try / finally here, at least conceptually:
+        // Since
+        // the base-class constructor might throw we would never get a chance to
+        // properly close is. Thus I deem it safer to only take responsibility
+        // for is
+        // when the constructor does NOT throw and place the try / finally into
+        // the
+        // callers code.
+        xml_ = XmlUtil.parse(is);
+        is.close();
+    }
 
-                               for (Element phone : XmlUtil.iterate(node.getElementsByTagName("number"),Element.class)) {
-                                       entry.attribute("phone", phone.getAttribute("type"), phone.getTextContent());
-                               }
-                               
-                               try {
-                                       entry.attribute("email", "", 
-                                                       node.getElementsByTagName("email").item(0).getTextContent());
-                               }
-                               catch (NullPointerException e) {} // ignore missing optional email
-                       }
-                       catch (NullPointerException e) {
-                               // Ignore incomplete entries
-                               entry = null;
-                       }
+    @Override
+    public void sendTo(EntryConsumer consumer)
+    {
+        for (Element node : XmlUtil.iterate(
+                xml_.getElementsByTagName("contact"), Element.class)) {
+            /*
+             * subnodes: category (unused, always 0) person/realName
+             * person/imageURL telephony/number (@prio, @type, @vanity)
+             * services/email mod_time
+             */
+            Entry entry = new Entry();
 
-                       if (entry != null)
-                               consumer.consume(entry);
-               }
-       }
+            try {
+                entry.name(node.getElementsByTagName("realName").item(0)
+                        .getTextContent());
+
+                for (Element phone : XmlUtil.iterate(
+                        node.getElementsByTagName("number"), Element.class)) {
+                    entry.attribute("phone", phone.getAttribute("type"),
+                            phone.getTextContent());
+                }
+
+                try {
+                    entry.attribute("email", "",
+                            node.getElementsByTagName("email").item(0)
+                                    .getTextContent());
+                }
+                catch (NullPointerException e) {} // ignore missing optional
+                                                  // email
+            }
+            catch (NullPointerException e) {
+                // Ignore incomplete entries
+                entry = null;
+            }
+
+            if (entry != null) consumer.consume(entry);
+        }
+    }
+
+    @Override
+    public void close() throws IOException
+    {}
 
-       @Override
-       public void close()
-               throws IOException
-       {}
-       
 }