X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fjvcard%2FContact.java;h=4b4446de67c7ab0b9d4fed2650024a7274913421;hb=f04a32e97c847d7e2551037a4d5f6a070879215c;hp=4b46eab8afa3dcc6aa840d8c89952d0c4ef8b3b5;hpb=30a4aa17f2141ad80a23447ee2e6303f6c9ef995;p=jvcard.git diff --git a/src/be/nikiroo/jvcard/Contact.java b/src/be/nikiroo/jvcard/Contact.java index 4b46eab..4b4446d 100644 --- a/src/be/nikiroo/jvcard/Contact.java +++ b/src/be/nikiroo/jvcard/Contact.java @@ -11,13 +11,17 @@ import java.util.UUID; import be.nikiroo.jvcard.parsers.Format; import be.nikiroo.jvcard.parsers.Parser; -import be.nikiroo.jvcard.resources.StringUtils; +import be.nikiroo.utils.StringUtils; /** * A contact is the information that represent a contact person or organisation. + *

+ * Each {@link Data} inside can be binary encoded or not: if it is binary + * encoded, it has an active BKey number (not -1) associated to it (of value 0 + * if still not sorted, or unique for the whole {@link Contact} if already + * processed). * * @author niki - * */ public class Contact extends BaseClass { private int nextBKey = 1; @@ -36,28 +40,32 @@ public class Contact extends BaseClass { } /** - * Return the preferred Data field with the given name, or NULL if none. + * Return the preferred Data field with the given name, the first one if + * none is preferred, or NULL if none at all. * * @param name * the name to look for - * @return the Data field, or NULL + * + * @return the {@link Data} field, or NULL */ public Data getPreferredData(String name) { - Data first = null; + Data pref = null; + int ipref = Integer.MAX_VALUE; for (Data data : getData(name)) { - if (first == null) - first = data; + if (pref == null) + pref = data; - if (data.isPreferred()) - return data; + if (data.getPreferred() < ipref) + pref = data; } - return first; + return pref; } /** * Return the value of the preferred data field with this name, or NULL if - * none (you cannot differentiate a NULL value and no value). + * none (you cannot differentiate a NULL value and no value with this method + * -- for that, check {@link Contact#getPreferredData(String)}). * * @param name * the name to look for @@ -74,7 +82,7 @@ public class Contact extends BaseClass { * Get the Data fields that share the given name. * * @param name - * the name to ook for + * the name to look for * @return a list of Data fields with this name */ public List getData(String name) { @@ -88,27 +96,6 @@ public class Contact extends BaseClass { return found; } - /** - * Return a {@link String} representation of this contact. - * - * @param format - * the {@link Format} to use - * @param startingBKey - * the starting BKey or -1 for no BKeys - * @return the {@link String} representation - */ - public String toString(Format format, int startingBKey) { - updateBKeys(false); - - StringBuilder builder = new StringBuilder(); - for (String line : Parser.toStrings(this, format, startingBKey)) { - builder.append(line); - builder.append("\r\n"); - } - - return builder.toString(); - } - /** * Return a {@link String} representation of this contact formated * accordingly to the given format. @@ -149,7 +136,7 @@ public class Contact extends BaseClass { * @return the {@link String} representation */ public String toString(String format, String separator) { - return toString(format, separator, null, -1, true, false); + return toString(format, separator, null, -1, true); } /** @@ -191,14 +178,13 @@ public class Contact extends BaseClass { * the {@link String} to use for left and right padding * @param width * a fixed width or -1 for "as long as needed" - * * @param unicode - * allow Uniode or only ASCII characters + * allow Unicode or only ASCII characters * * @return the {@link String} representation */ public String toString(String format, String separator, String padding, - int width, boolean unicode, boolean removeAccents) { + int width, boolean unicode) { StringBuilder builder = new StringBuilder(); for (String str : toStringArray(format, separator, padding, width, @@ -323,7 +309,7 @@ public class Contact extends BaseClass { * a fixed width or -1 for "as long as needed" * @param unicode * allow Uniode or only ASCII characters - * + * * @return the {@link String} representation */ public String[] toStringArray(String format, int width, boolean unicode) { @@ -400,7 +386,11 @@ public class Contact extends BaseClass { value = ff.get(fieldNum); } } else { - value = getPreferredDataValue(field); + // we don't need the *data* in binary mode... + if (binary) + value = getData(field).size() > 0 ? "x" : null; + else + value = getPreferredDataValue(field); } if (value == null) { @@ -520,14 +510,14 @@ public class Contact extends BaseClass { } /** - * Return a {@link String} representation of this contact, in vCard 2.1, - * without BKeys. + * Return a simple {@link String} representation of this contact without + * BKeys. * * @return the {@link String} representation */ @Override public String toString() { - return toString(Format.VCard21, -1); + return "[Contact: " + getPreferredDataValue("FN") + "]"; } /** @@ -602,12 +592,26 @@ public class Contact extends BaseClass { /** * Add a {@link String} to the given {@link List}, but make sure it does not * exceed the maximum size, and truncate it if needed to fit. + *

+ * Will always add one and only one {@link String} (potentially empty) at + * the end of list. * * @param list + * the list to add to * @param add + * the {@link String} to (either fully or partially) add * @param currentSize + * the current total size (managed outside of this method) * @param maxSize - * @return + * the maximum size that cannot be exceeded (or -1 for + * "no maximum") -- if the maximum size would be exceeded by + * adding this {@link String}, only a part of it will be added; + * if the maximum size is already reached or exceeded (should not + * happen because of this method), an empty {@link String} will + * be added + * + * @return the number of characters added (the size of the last + * {@link String} in list) */ static private int addToList(List list, String add, int currentSize, int maxSize) {