boolean fn = false;
boolean n = false;
- for (Data data : content) {
- if (data.getName().equals("N")) {
- n = true;
- } else if (data.getName().equals("FN")) {
- fn = true;
- }
+ if (content != null) {
+ for (Data data : content) {
+ if (data.getName().equals("N")) {
+ n = true;
+ } else if (data.getName().equals("FN")) {
+ fn = true;
+ }
- if (!data.getName().equals("VERSION")) {
- datas.add(data);
+ if (!data.getName().equals("VERSION")) {
+ datas.add(data);
+ }
}
}
}
/**
- * Return the informations (note: this is the actual list, be careful).
+ * Return the number of {@link Data} present in this {@link Contact}.
+ *
+ * @return the number of {@link Data}s
+ */
+ public int size() {
+ return datas.size();
+ }
+
+ /**
+ * Return the {@link Data} at index <i>index</i>.
+ *
+ * @param index
+ * the index of the {@link Data} to find
+ *
+ * @return the {@link Data}
+ *
+ * @throws IndexOutOfBoundsException
+ * if the index is < 0 or >= {@link Contact#size()}
+ */
+ public Data get(int index) {
+ return datas.get(index);
+ }
+
+ /**
+ * Add a new {@link Data} in this {@link Contact}.
+ *
+ * @param data
+ * the new data
+ */
+ public void add(Data data) {
+ data.setParent(this);
+ data.setDirty();
+ datas.add(data);
+ }
+
+ /**
+ * Remove the given {@link Data} from its this {@link Contact} if it is in.
*
- * @return the list of data anout this contact
+ * @return TRUE in case of success
*/
- public List<Data> getContent() {
- return datas;
+ public boolean remove(Data data) {
+ if (datas.remove(data)) {
+ setDirty();
+ return true;
+ }
+
+ return false;
}
/**
for (Data data : getData(name)) {
if (first == null)
first = data;
- for (TypeInfo type : data.getTypes()) {
+ for (int index = 0; index < data.size(); index++) {
+ TypeInfo type = data.get(index);
if (type.getName().equals("TYPE")
&& type.getValue().equals("pref")) {
return data;
* The format is basically a list of field names separated by a pipe and
* optionally parametrised. The parameters allows you to:
* <ul>
- * <li>@x: show only a present/not present info</li>
+ * <li>@x: (the 'x' is the letter 'x') show only a present/not present info</li>
* <li>@n: limit the size to a fixed value 'n'</li>
* <li>@+: expand the size of this field as much as possible</li>
* </ul>
return str.toArray(new String[] {});
}
- /**
- * 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.
- *
- * @param list
- * @param add
- * @param currentSize
- * @param maxSize
- * @return
- */
- static private int addToList(List<String> list, String add,
- int currentSize, int maxSize) {
- if (add == null || add.length() == 0) {
- if (add != null)
- list.add(add);
- return 0;
- }
-
- if (maxSize > -1) {
- if (currentSize < maxSize) {
- if (currentSize + add.length() >= maxSize) {
- add = add.substring(0, maxSize - currentSize);
- }
- } else {
- add = "";
- }
- }
-
- list.add(add);
- return add.length();
- }
-
- /**
- * Return a {@link String} representation of this contact, in vCard 2.1,
- * without BKeys.
- *
- * @return the {@link String} representation
- */
- public String toString() {
- return toString(Format.VCard21, -1);
- }
-
/**
* Update the information from this contact with the information in the
* given contact. Non present fields will be removed, new fields will be
setDirty();
}
+ /**
+ * Delete this {@link Contact} from its parent {@link Card} if any.
+ *
+ * @return TRUE in case of success
+ */
+ public boolean delete() {
+ if (parent != null) {
+ return parent.remove(this);
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if this {@link Contact} has unsaved changes.
+ *
+ * @return TRUE if it has
+ */
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ /**
+ * Return a {@link String} representation of this contact, in vCard 2.1,
+ * without BKeys.
+ *
+ * @return the {@link String} representation
+ */
+ @Override
+ public String toString() {
+ return toString(Format.VCard21, -1);
+ }
+
/**
* Mark all the binary fields with a BKey number.
*
}
}
- public boolean isDirty() {
- return dirty;
- }
-
/**
* Notify that this element has unsaved changes, and notify its parent of
* the same if any.
this.parent.setDirty();
}
+ /**
+ * Notify this element <i>and all its descendants</i> that it is in pristine
+ * state (as opposed to dirty).
+ */
+ void setPristine() {
+ dirty = false;
+ for (Data data : datas) {
+ data.setPristine();
+ }
+ }
+
+ /**
+ * Set the parent of this {@link Contact} <i>and all its descendants</i>.
+ *
+ * @param parent
+ * the new parent
+ */
void setParent(Card parent) {
this.parent = parent;
for (Data data : datas) {
}
/**
- * Delete this {@link Contact} from its parent {@link Card} if any.
+ * 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.
*
- * @return TRUE in case of success
+ * @param list
+ * @param add
+ * @param currentSize
+ * @param maxSize
+ * @return
*/
- public boolean delete() {
- if (parent != null) {
- List<Contact> list = parent.getContactsList();
- for (int i = 0; i < list.size(); i++) {
- if (list.get(i) == this) {
- list.remove(i);
- parent.setDirty();
- return true;
+ static private int addToList(List<String> list, String add,
+ int currentSize, int maxSize) {
+ if (add == null || add.length() == 0) {
+ if (add != null)
+ list.add(add);
+ return 0;
+ }
+
+ if (maxSize > -1) {
+ if (currentSize < maxSize) {
+ if (currentSize + add.length() >= maxSize) {
+ add = add.substring(0, maxSize - currentSize);
}
+ } else {
+ add = "";
}
}
- return false;
+ list.add(add);
+ return add.length();
}
- /**
- * Notify this element <i>and all its descendants</i> that it is in pristine
- * state (as opposed to dirty).
- */
- void setPristine() {
- dirty = false;
- for (Data data : datas) {
- data.setPristine();
- }
- }
}