X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Fjvcard%2FCard.java;h=de5ab67a604207f0d294f3d9a7652a460c4754a3;hb=ebead449cce5df1849d54796fd2515a9e0556fee;hp=2622266c259a43c328178ae08c0a68b97c45e27a;hpb=26d2bd0591901a8d52bd24802a8d6827d0e9b833;p=jvcard.git diff --git a/src/be/nikiroo/jvcard/Card.java b/src/be/nikiroo/jvcard/Card.java index 2622266..de5ab67 100644 --- a/src/be/nikiroo/jvcard/Card.java +++ b/src/be/nikiroo/jvcard/Card.java @@ -1,14 +1,10 @@ package be.nikiroo.jvcard; -import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; -import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; -import java.io.InputStreamReader; import java.security.InvalidParameterException; -import java.util.LinkedList; import java.util.List; import be.nikiroo.jvcard.parsers.Format; @@ -25,28 +21,64 @@ public class Card extends BaseClass { private File file; 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}. * * @param file - * the file containing the {@link Card} data, must not be NULL + * the input {@link File} containing the {@link Card} data or + * NULL for an empty card (usually a {@link File} name or a + * network path) * @param format * the {@link Format} to use to parse it * * @throws IOException * in case of IO error - * @throws NullPointerException - * if file is NULL * @throws InvalidParameterException * if format is NULL */ public Card(File file, Format format) throws IOException { - super(load(file, format)); + this(Parser.parse(file, format)); + + if (file != null) { + if (file.exists()) { + lastModified = file.lastModified(); + } + } - this.file = file; this.format = format; - this.name = file.getName(); + + if (file != null) { + this.file = file; + switch (format) { + case VCard21: + this.name = file.getName().replaceAll(".[vV][cC][fF]$", ""); + break; + case Abook: + default: + this.name = file.getName(); + break; + } + } + } + + /** + * Create a new {@link Card} from the given {@link Contact}s. + * + * @param contacts + * the input contacts + * + * @throws IOException + * in case of IO error + * @throws InvalidParameterException + * if format is NULL + */ + public Card(List contacts) throws IOException { + super(contacts); + + lastModified = -1; } /** @@ -54,7 +86,7 @@ public class Card extends BaseClass { * {@link Format}. * * @param file - * the {@link File} to save to + * the output to save to * @param format * the {@link Format} to use * @@ -71,7 +103,8 @@ public class Card extends BaseClass { writer.append(toString(format)); writer.close(); - if (file.equals(this.file)) { + if (this.file != null + && file.getCanonicalPath().equals(this.file.getCanonicalPath())) { setPristine(); } @@ -90,6 +123,23 @@ public class Card extends BaseClass { return saveAs(file, format); } + /** + * Reload the data from the input. + * + * @return TRUE if it was done + * + * @throws IOException + * in case of IO error + */ + public boolean reload() throws IOException { + if (file == null) + return false; + + this.replaceListContent(Parser.parse(file, format)); + setPristine(); + return true; + } + /** * Return a {@link String} representation of this {@link Card} in the given * {@link Format}. @@ -113,34 +163,65 @@ public class Card extends BaseClass { return name; } - @Override - public String toString() { - return toString(Format.VCard21); + /** + * Return the original {@link Format} of the {@link Card}. + * + * @return the {@link Format} + */ + public Format getFormat() { + return format; } /** - * Load the data from the given {@link File} under the given {@link Format}. + * Return the {@link File} which was used to open this {@link Card}. * - * @param file - * the {@link File} to load from - * @param format - * the {@link Format} to load as + * @return the input + */ + public File getFile() { + return file; + } + + /** + * Return the date of the last modification for this {@link Card} (or -1 if + * unknown/new). * - * @return the list of elements - * @throws IOException - * in case of IO error + * @return the last modified date */ - static private List load(File file, Format format) - throws IOException { - BufferedReader buffer = new BufferedReader(new InputStreamReader( - new FileInputStream(file), "UTF-8")); - List lines = new LinkedList(); - for (String line = buffer.readLine(); line != null; line = buffer - .readLine()) { - lines.add(line); - } - buffer.close(); + public long getLastModified() { + return lastModified; + } - return Parser.parse(lines, format); + /** + * 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); + } + + @Override + public String getId() { + return "" + name; + } + + @Override + public String getState() { + return "" + name + format; } }