X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Fjvcard%2FContact.java;h=6d362f9c9aed7675fe7fb292095d021848829b52;hb=c8398c23a885b1b7b78fba35a423c7136fb975cf;hp=779b60a3c596ee6ee9bcbc20b09bcf66e3d4edfd;hpb=26d254a3ac6cddbd3583cbbcbf8d43aa15c6a32e;p=jvcard.git
diff --git a/src/be/nikiroo/jvcard/Contact.java b/src/be/nikiroo/jvcard/Contact.java
index 779b60a..6d362f9 100644
--- a/src/be/nikiroo/jvcard/Contact.java
+++ b/src/be/nikiroo/jvcard/Contact.java
@@ -11,7 +11,7 @@ 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.
@@ -36,23 +36,26 @@ 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;
}
/**
@@ -88,34 +91,14 @@ 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.
*
*
* The format is basically a list of field names separated by a pipe and
- * optionally parametrised. The parameters allows you to:
+ * optionally parametrised with the 'at' (@) symbol. The parameters allows
+ * you to:
*
*
+ * In case of lists or multiple-fields values, you can select a specific + * list or field with: + *
* You can also add a fixed text if it starts with a simple-quote ('). *
* @@ -139,7 +131,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); } /** @@ -157,6 +149,15 @@ public class Contact extends BaseClass { * * *+ * In case of lists or multiple-fields values, you can select a specific + * list or field with: + *
* You can also add a fixed text if it starts with a simple-quote ('). *
* @@ -172,14 +173,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, @@ -205,6 +205,15 @@ public class Contact extends BaseClass { * * *+ * In case of lists or multiple-fields values, you can select a specific + * list or field with: + *
* You can also add a fixed text if it starts with a simple-quote ('). *
* @@ -273,6 +282,15 @@ public class Contact extends BaseClass { * * *+ * In case of lists or multiple-fields values, you can select a specific + * list or field with: + *
* You can also add a fixed text if it starts with a simple-quote ('). *
* @@ -286,7 +304,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) { @@ -313,6 +331,8 @@ public class Contact extends BaseClass { int size = -1; boolean binary = false; boolean expand = false; + int fieldNum = -1; + int valueNum = -1; if (field.length() > 0 && field.charAt(0) != '\'' && field.contains("@")) { @@ -326,10 +346,22 @@ public class Contact extends BaseClass { } else if (opt.equals("+")) { expand = true; numOfFieldsToExpand++; + } else if (opt.length() > 0 && opt.charAt(0) == '(') { + try { + opt = opt.substring(1, opt.length() - 1); + valueNum = Integer.parseInt(opt); + } catch (Exception e) { + } + } else if (opt.length() > 0 && opt.charAt(0) == '[') { + try { + opt = opt.substring(1, opt.length() - 1); + fieldNum = Integer.parseInt(opt); + } catch (Exception e) { + } } else { try { size = Integer.parseInt(opt); - } catch (Exception e) { + } catch (NumberFormatException e) { } } } @@ -338,8 +370,22 @@ public class Contact extends BaseClass { String value = null; if (field.length() > 0 && field.charAt(0) == '\'') { value = field.substring(1); + } else if (valueNum >= 0) { + List