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