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;
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}.
* if format is NULL
*/
public Card(File file, Format format) throws IOException {
- this(load(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;
this.file = file;
switch (format) {
case VCard21:
- this.name = file.getName().replaceAll(
- ".[vV][cC][fF]$", "");
+ this.name = file.getName().replaceAll(".[vV][cC][fF]$", "");
break;
case Abook:
default:
* @throws InvalidParameterException
* if format is NULL
*/
- public Card(List<Contact> contacts) throws IOException {
+ public Card(List<Contact> contacts) {
super(contacts);
lastModified = -1;
* Save the {@link Card} to the given {@link File} with the given
* {@link Format}.
*
- * @param output
+ * @param file
* the output to save to
* @param format
* the {@link Format} to use
* @throws IOException
* in case of IO errors
*/
- public boolean saveAs(File output, Format format) throws IOException {
- if (output == null)
+ public boolean saveAs(File file, Format format) throws IOException {
+ if (file == null)
return false;
- BufferedWriter writer = new BufferedWriter(new FileWriter(output));
+ BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.append(toString(format));
writer.close();
- if (output.getCanonicalPath().equals(this.file.getCanonicalPath())) {
+ if (this.file != null
+ && file.getCanonicalPath().equals(this.file.getCanonicalPath())) {
+ lastModified = file.lastModified();
setPristine();
}
if (file == null)
return false;
- this.replaceListContent(load(file, format));
+ this.replaceListContent(Parser.parseContact(file, format));
+ lastModified = file.lastModified();
setPristine();
+
return true;
}
* @return the {@link String}
*/
public String toString(Format format) {
- return Parser.toString(this, format);
+ StringBuilder builder = new StringBuilder();
+ for (String line : Parser.toStrings(this, format)) {
+ builder.append(line);
+ builder.append("\r\n");
+ }
+ return builder.toString();
}
/**
}
/**
- * Return the input which was used to open this {@link Card}.
+ * Return the {@link File} which was used to open this {@link Card}.
*
* @return the input
*/
- public File getInput() {
+ public File getFile() {
return file;
}
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);
}
- /**
- * Load the data from the given {@link File} under the given {@link Format}.
- *
- * @param file
- * the input to load from
- * @param format
- * the {@link Format} to load as
- *
- * @return the list of elements
- *
- * @throws IOException
- * in case of IO error
- */
- private static List<Contact> load(File file, Format format)
- throws IOException {
- List<String> lines = null;
-
- if (file != null && file.exists()) {
- BufferedReader buffer = new BufferedReader(new InputStreamReader(
- new FileInputStream(file), "UTF-8"));
- lines = new LinkedList<String>();
- for (String line = buffer.readLine(); line != null; line = buffer
- .readLine()) {
- lines.add(line);
- }
- buffer.close();
- }
-
- if (lines == null)
- return new LinkedList<Contact>();
+ @Override
+ public String getId() {
+ return "" + name;
+ }
- return Parser.parse(lines, format);
+ @Override
+ public String getState() {
+ return ("" + name + format).replace(' ', '_');
}
}