Performance improvement:
[jvcard.git] / src / be / nikiroo / jvcard / Card.java
index de5ab67a604207f0d294f3d9a7652a460c4754a3..0a405bee47d744e6545b3360579343fdc5466806 100644 (file)
@@ -22,7 +22,6 @@ public class Card extends BaseClass<Contact> {
        private String name;
        private Format format;
        private long lastModified;
-       private boolean remote;
 
        /**
         * Create a new {@link Card} from the given {@link File} and {@link Format}.
@@ -40,12 +39,10 @@ public class Card extends BaseClass<Contact> {
         *             if format is NULL
         */
        public Card(File file, Format format) throws IOException {
-               this(Parser.parse(file, format));
+               this(Parser.parseContact(file, format));
 
-               if (file != null) {
-                       if (file.exists()) {
-                               lastModified = file.lastModified();
-                       }
+               if (file != null && file.exists()) {
+                       lastModified = file.lastModified();
                }
 
                this.format = format;
@@ -75,7 +72,7 @@ public class Card extends BaseClass<Contact> {
         * @throws InvalidParameterException
         *             if format is NULL
         */
-       public Card(List<Contact> contacts) throws IOException {
+       public Card(List<Contact> contacts) {
                super(contacts);
 
                lastModified = -1;
@@ -100,11 +97,12 @@ public class Card extends BaseClass<Contact> {
                        return false;
 
                BufferedWriter writer = new BufferedWriter(new FileWriter(file));
-               writer.append(toString(format));
+               Parser.write(writer, format, this);
                writer.close();
 
                if (this.file != null
                                && file.getCanonicalPath().equals(this.file.getCanonicalPath())) {
+                       lastModified = file.lastModified();
                        setPristine();
                }
 
@@ -135,22 +133,11 @@ public class Card extends BaseClass<Contact> {
                if (file == null)
                        return false;
 
-               this.replaceListContent(Parser.parse(file, format));
+               this.replaceListContent(Parser.parseContact(file, format));
+               lastModified = file.lastModified();
                setPristine();
-               return true;
-       }
 
-       /**
-        * Return a {@link String} representation of this {@link Card} in the given
-        * {@link Format}.
-        * 
-        * @param format
-        *            the {@link Format} to use
-        * 
-        * @return the {@link String}
-        */
-       public String toString(Format format) {
-               return Parser.toString(this, format);
+               return true;
        }
 
        /**
@@ -181,6 +168,15 @@ public class Card extends BaseClass<Contact> {
                return file;
        }
 
+       /**
+        * Break the link between this {@link Card} and he {@link File} which was
+        * used to open it if any.
+        */
+       public void unlink() {
+               file = null;
+               lastModified = -1;
+       }
+
        /**
         * Return the date of the last modification for this {@link Card} (or -1 if
         * unknown/new).
@@ -191,28 +187,9 @@ public class Card extends BaseClass<Contact> {
                return lastModified;
        }
 
-       /**
-        * Check if this {@link Card} is remote.
-        * 
-        * @return TRUE if this {@link Card} is remote
-        */
-       public boolean isRemote() {
-               return remote;
-       }
-
-       /**
-        * Set the remote option on this {@link Card}.
-        * 
-        * @param remote
-        *            TRUE if this {@link Card} is remote
-        */
-       public void setRemote(boolean remote) {
-               this.remote = remote;
-       }
-
        @Override
        public String toString() {
-               return toString(Format.VCard21);
+               return "[Card: " + name + "]";
        }
 
        @Override
@@ -222,6 +199,6 @@ public class Card extends BaseClass<Contact> {
 
        @Override
        public String getState() {
-               return "" + name + format;
+               return ("" + name + format).replace(' ', '_');
        }
 }