1547 lines
49 KiB
Java
1547 lines
49 KiB
Java
/* Copyright (c) 2008 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
|
|
package sample.contacts;
|
|
|
|
import com.google.gdata.data.DateTime;
|
|
import com.google.gdata.data.PlainTextConstruct;
|
|
import com.google.gdata.data.contacts.BillingInformation;
|
|
import com.google.gdata.data.contacts.Birthday;
|
|
import com.google.gdata.data.contacts.CalendarLink;
|
|
import com.google.gdata.data.contacts.ContactEntry;
|
|
import com.google.gdata.data.contacts.ContactGroupEntry;
|
|
import com.google.gdata.data.contacts.DirectoryServer;
|
|
import com.google.gdata.data.contacts.Event;
|
|
import com.google.gdata.data.contacts.ExternalId;
|
|
import com.google.gdata.data.contacts.Gender;
|
|
import com.google.gdata.data.contacts.GroupMembershipInfo;
|
|
import com.google.gdata.data.contacts.Hobby;
|
|
import com.google.gdata.data.contacts.Initials;
|
|
import com.google.gdata.data.contacts.Jot;
|
|
import com.google.gdata.data.contacts.Language;
|
|
import com.google.gdata.data.contacts.MaidenName;
|
|
import com.google.gdata.data.contacts.Mileage;
|
|
import com.google.gdata.data.contacts.Nickname;
|
|
import com.google.gdata.data.contacts.Occupation;
|
|
import com.google.gdata.data.contacts.Priority;
|
|
import com.google.gdata.data.contacts.Relation;
|
|
import com.google.gdata.data.contacts.Sensitivity;
|
|
import com.google.gdata.data.contacts.ShortName;
|
|
import com.google.gdata.data.contacts.Subject;
|
|
import com.google.gdata.data.contacts.UserDefinedField;
|
|
import com.google.gdata.data.contacts.Website;
|
|
import com.google.gdata.data.extensions.AdditionalName;
|
|
import com.google.gdata.data.extensions.City;
|
|
import com.google.gdata.data.extensions.Country;
|
|
import com.google.gdata.data.extensions.Email;
|
|
import com.google.gdata.data.extensions.ExtendedProperty;
|
|
import com.google.gdata.data.extensions.FamilyName;
|
|
import com.google.gdata.data.extensions.FormattedAddress;
|
|
import com.google.gdata.data.extensions.FullName;
|
|
import com.google.gdata.data.extensions.GivenName;
|
|
import com.google.gdata.data.extensions.Im;
|
|
import com.google.gdata.data.extensions.Name;
|
|
import com.google.gdata.data.extensions.NamePrefix;
|
|
import com.google.gdata.data.extensions.NameSuffix;
|
|
import com.google.gdata.data.extensions.Neighborhood;
|
|
import com.google.gdata.data.extensions.OrgDepartment;
|
|
import com.google.gdata.data.extensions.OrgJobDescription;
|
|
import com.google.gdata.data.extensions.OrgName;
|
|
import com.google.gdata.data.extensions.OrgSymbol;
|
|
import com.google.gdata.data.extensions.OrgTitle;
|
|
import com.google.gdata.data.extensions.Organization;
|
|
import com.google.gdata.data.extensions.PhoneNumber;
|
|
import com.google.gdata.data.extensions.PoBox;
|
|
import com.google.gdata.data.extensions.PostCode;
|
|
import com.google.gdata.data.extensions.Region;
|
|
import com.google.gdata.data.extensions.Street;
|
|
import com.google.gdata.data.extensions.StructuredPostalAddress;
|
|
import com.google.gdata.data.extensions.When;
|
|
import com.google.gdata.data.extensions.Where;
|
|
import com.google.gdata.util.XmlBlob;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.File;
|
|
import java.io.FileReader;
|
|
import java.io.IOException;
|
|
import java.io.PrintStream;
|
|
import java.util.List;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
* Helper class to parse, update and display a contact.
|
|
* It uses a bunch of anonymous inner classes for every kind of element to
|
|
* perform the actual job. It is defined as an enum to take advantage of the
|
|
* automatic instantiation and constant-specific methods.
|
|
*
|
|
*
|
|
*/
|
|
public enum ElementHelper implements ElementHelperInterface {
|
|
|
|
BILLING_INFORMATION {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
BillingInformation billingInformation = new BillingInformation();
|
|
billingInformation.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setBillingInformation(billingInformation);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasBillingInformation()) {
|
|
out.println("billing information: "
|
|
+ contact.getBillingInformation().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasBillingInformation()) {
|
|
dest.setBillingInformation(src.getBillingInformation());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<billing_information>";
|
|
}
|
|
},
|
|
|
|
BIRTHDAY {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Birthday birthday = new Birthday();
|
|
birthday.setWhen(parser.get(PropertyName.VALUE));
|
|
contact.setBirthday(birthday);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasBirthday()) {
|
|
out.println("birthday: " + contact.getBirthday().getWhen());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasBirthday()) {
|
|
dest.setBirthday(src.getBirthday());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "YYYY-MM-DD|--MM-DD";
|
|
}
|
|
},
|
|
|
|
CALENDAR_LINK(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
CalendarLink calendarLink = new CalendarLink();
|
|
calendarLink.setHref(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
calendarLink.setRel(
|
|
CalendarLink.Rel.valueOf(
|
|
parser.get(PropertyName.REL).toUpperCase()));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
calendarLink.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
if (parser.has(PropertyName.PRIMARY)) {
|
|
calendarLink.setPrimary(parser.is(PropertyName.PRIMARY));
|
|
}
|
|
contact.addCalendarLink(calendarLink);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasCalendarLinks()) {
|
|
out.println("calendar links:");
|
|
for (CalendarLink calendarLink : contact.getCalendarLinks()) {
|
|
out.print(" " + calendarLink.getHref());
|
|
if (calendarLink.hasRel()) {
|
|
out.print(" rel:" + calendarLink.getRel());
|
|
} else if (calendarLink.hasLabel()) {
|
|
out.print(" label:" + calendarLink.getLabel());
|
|
}
|
|
if (calendarLink.hasPrimary() && calendarLink.getPrimary()) {
|
|
out.print(" (primary)");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasCalendarLinks()) {
|
|
List<CalendarLink> calendarLinks = dest.getCalendarLinks();
|
|
calendarLinks.clear();
|
|
calendarLinks.addAll(src.getCalendarLinks());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<href>"
|
|
+ "[,rel:<rel>]"
|
|
+ "[,label:<label>]"
|
|
+ "[,primary:true|false]";
|
|
}
|
|
},
|
|
|
|
DIRECTORY_SERVER {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
DirectoryServer directoryServer = new DirectoryServer();
|
|
directoryServer.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setDirectoryServer(directoryServer);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasDirectoryServer()) {
|
|
out.println("directory server: "
|
|
+ contact.getDirectoryServer().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasDirectoryServer()) {
|
|
dest.setDirectoryServer(src.getDirectoryServer());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<directory_server>";
|
|
}
|
|
},
|
|
|
|
EMAIL(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Email email = new Email();
|
|
email.setAddress(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
email.setRel(parser.get(PropertyName.REL));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
email.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
if (parser.has(PropertyName.PRIMARY)) {
|
|
email.setPrimary(parser.is(PropertyName.PRIMARY));
|
|
}
|
|
contact.addEmailAddress(email);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasEmailAddresses()) {
|
|
out.println("email addresses:");
|
|
for (Email email : contact.getEmailAddresses()) {
|
|
out.print(" " + email.getAddress());
|
|
if (email.getRel() != null) {
|
|
out.print(" rel:" + email.getRel());
|
|
}
|
|
if (email.getLabel() != null) {
|
|
out.print(" label:" + email.getLabel());
|
|
}
|
|
if (email.getPrimary()) {
|
|
out.print(" (primary)");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasEmailAddresses()) {
|
|
List<Email> emailAddresses = dest.getEmailAddresses();
|
|
emailAddresses.clear();
|
|
emailAddresses.addAll(src.getEmailAddresses());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<email>"
|
|
+ "[,rel:<rel>]"
|
|
+ "[,label:<label>]"
|
|
+ "[,primary:true|false]";
|
|
}
|
|
},
|
|
|
|
EVENT(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Event event = new Event();
|
|
When when = new When();
|
|
when.setStartTime(DateTime.parseDate(parser.get(PropertyName.VALUE)));
|
|
event.setWhen(when);
|
|
if (parser.has(PropertyName.REL)) {
|
|
event.setRel(parser.get(PropertyName.REL));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
event.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
contact.addEvent(event);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasEvents()) {
|
|
out.println("events:");
|
|
for (Event event : contact.getEvents()) {
|
|
out.print(" " + event.getWhen().getStartTime().toString());
|
|
if (event.hasRel()) {
|
|
out.print(" rel:" + event.getRel());
|
|
}
|
|
if (event.hasLabel()) {
|
|
out.print(" label:" + event.getLabel());
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasEvents()) {
|
|
List<Event> events = dest.getEvents();
|
|
events.clear();
|
|
events.addAll(src.getEvents());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<YYYY-MM-DD>"
|
|
+ "[,rel:<rel>]"
|
|
+ "[,label:<label>]";
|
|
}
|
|
},
|
|
|
|
EXTENDED_PROPERTY(true) {
|
|
/**
|
|
* Reads an XmlBlob from a file.
|
|
*
|
|
* @param f the file to be readed.
|
|
* @return the readed XmlBlog.
|
|
*
|
|
* @throws IOException in case of any IO error.
|
|
*/
|
|
private XmlBlob readFromFile(File f) throws IOException {
|
|
StringBuffer xmlBuffer = new StringBuffer();
|
|
BufferedReader reader = null;
|
|
try {
|
|
reader = new BufferedReader(new FileReader(f));
|
|
String line;
|
|
while ((line = reader.readLine()) != null) {
|
|
xmlBuffer.append(line);
|
|
}
|
|
} finally {
|
|
if (reader != null) {
|
|
reader.close();
|
|
}
|
|
}
|
|
XmlBlob xmlBlob = new XmlBlob();
|
|
xmlBlob.setBlob(new String(xmlBuffer));
|
|
return xmlBlob;
|
|
}
|
|
|
|
/**
|
|
* Parses an ExtendedProperty.
|
|
*
|
|
* @param parser the parser used for the parsing of the description.
|
|
* @return the parsed in ExtendedProperty.
|
|
*/
|
|
private ExtendedProperty parse(ElementParser parser) {
|
|
ExtendedProperty extendedProperty = new ExtendedProperty();
|
|
extendedProperty.setName(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.FILE)) {
|
|
File f = new File(parser.get(PropertyName.FILE));
|
|
if (!f.exists()) {
|
|
throw new RuntimeException("No Such File:" +
|
|
parser.get(PropertyName.FILE));
|
|
}
|
|
try {
|
|
extendedProperty.setXmlBlob(readFromFile(f));
|
|
} catch (IOException ex) {
|
|
throw new RuntimeException("Failed to read file "
|
|
+ parser.get(PropertyName.FILE));
|
|
}
|
|
} else if (parser.has(PropertyName.TEXT)) {
|
|
extendedProperty.setValue(parser.get(PropertyName.TEXT));
|
|
}
|
|
return extendedProperty;
|
|
}
|
|
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
ExtendedProperty extendedProperty = parse(parser);
|
|
contact.addExtendedProperty(extendedProperty);
|
|
}
|
|
|
|
public void parseGroup(ContactGroupEntry group, ElementParser parser) {
|
|
ExtendedProperty extendedProperty = parse(parser);
|
|
group.addExtendedProperty(extendedProperty);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasExtendedProperties()) {
|
|
out.println("extended properties:");
|
|
for (ExtendedProperty property : contact.getExtendedProperties()) {
|
|
out.print(" " + property.getName());
|
|
if (property.hasValue()) {
|
|
out.print(" value:" + property.getValue());
|
|
} else {
|
|
out.print(" xmlBlob:" + property.getXmlBlob());
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasExtendedProperties()) {
|
|
List<ExtendedProperty> extendedProps = dest.getExtendedProperties();
|
|
extendedProps.clear();
|
|
extendedProps.addAll(src.getExtendedProperties());
|
|
}
|
|
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<name>,text:<value>|file:<XmlFilePath>";
|
|
}
|
|
},
|
|
|
|
EXTERNAL_ID(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
ExternalId externalId = new ExternalId();
|
|
externalId.setValue(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
externalId.setRel(parser.get(PropertyName.REL));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
externalId.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
contact.addExternalId(externalId);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasExternalIds()) {
|
|
out.println("external ids:");
|
|
for (ExternalId externalId : contact.getExternalIds()) {
|
|
out.print(" " + externalId.getValue());
|
|
if (externalId.hasRel()) {
|
|
out.print(" rel:" + externalId.getRel());
|
|
}
|
|
if (externalId.hasLabel()) {
|
|
out.print(" label:" + externalId.getLabel());
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasExternalIds()) {
|
|
List<ExternalId> externalIds = dest.getExternalIds();
|
|
externalIds.clear();
|
|
externalIds.addAll(src.getExternalIds());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<external_id>,rel:<rel>|label:<label>";
|
|
}
|
|
},
|
|
|
|
GENDER {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Gender gender = new Gender();
|
|
String value = parser.get(PropertyName.VALUE);
|
|
if (value.equals("male")) {
|
|
gender.setValue(Gender.Value.MALE);
|
|
} else if (value.equals("female")) {
|
|
gender.setValue(Gender.Value.FEMALE);
|
|
} else {
|
|
throw new IllegalArgumentException("gender should be male or female");
|
|
}
|
|
contact.setGender(gender);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasGender()) {
|
|
out.println("gender: "
|
|
+ contact.getGender().getValue().toString().toLowerCase());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasGender()) {
|
|
dest.setGender(src.getGender());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "male|female";
|
|
}
|
|
},
|
|
|
|
GROUP_MEMBERSHIP_INFO(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
GroupMembershipInfo groupMembershipInfo = new GroupMembershipInfo();
|
|
groupMembershipInfo.setHref(parser.get(PropertyName.VALUE));
|
|
contact.addGroupMembershipInfo(groupMembershipInfo);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasGroupMembershipInfos()) {
|
|
out.println("group membership info:");
|
|
for (GroupMembershipInfo group : contact.getGroupMembershipInfos()) {
|
|
out.print(" " + group.getHref());
|
|
if (group.getDeleted()) {
|
|
out.print(" (deleted)");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasGroupMembershipInfos()) {
|
|
List<GroupMembershipInfo> groupMembershipInfos
|
|
= dest.getGroupMembershipInfos();
|
|
groupMembershipInfos.clear();
|
|
groupMembershipInfos.addAll(src.getGroupMembershipInfos());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<url>";
|
|
}
|
|
},
|
|
|
|
HOBBY(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Hobby hobby = new Hobby();
|
|
hobby.setValue(parser.get(PropertyName.VALUE));
|
|
contact.addHobby(hobby);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasHobbies()) {
|
|
out.println("hobbies:");
|
|
for (Hobby hobby : contact.getHobbies()) {
|
|
out.println(" " + hobby.getValue());
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasHobbies()) {
|
|
List<Hobby> hobbies = dest.getHobbies();
|
|
hobbies.clear();
|
|
hobbies.addAll(src.getHobbies());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<hobby>";
|
|
}
|
|
},
|
|
|
|
IM(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Im im = new Im();
|
|
im.setAddress(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
im.setRel(parser.get(PropertyName.REL));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
im.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
if (parser.has(PropertyName.PROTOCOL)) {
|
|
im.setProtocol(parser.get(PropertyName.PROTOCOL));
|
|
}
|
|
if (parser.has(PropertyName.PRIMARY)) {
|
|
im.setPrimary(parser.is(PropertyName.PRIMARY));
|
|
}
|
|
contact.addImAddress(im);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasImAddresses()) {
|
|
out.println("im addresses:");
|
|
for (Im im : contact.getImAddresses()) {
|
|
out.print(" " + im.getAddress());
|
|
if (im.hasRel()) {
|
|
out.print(" rel:" + im.getRel());
|
|
} else if (im.hasLabel()) {
|
|
out.print(" label:" + im.getLabel());
|
|
}
|
|
if (im.hasProtocol()) {
|
|
out.print(" protocol:" + im.getProtocol());
|
|
}
|
|
if (im.getPrimary()) {
|
|
out.print(" (primary)");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasImAddresses()) {
|
|
List<Im> ims = dest.getImAddresses();
|
|
ims.clear();
|
|
ims.addAll(src.getImAddresses());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<im>"
|
|
+ "[,rel:<rel>]"
|
|
+ "[,label:<label>]"
|
|
+ "[,protocol:<protocol>]"
|
|
+ "[,primary:true|false]";
|
|
}
|
|
},
|
|
|
|
INITIALS {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Initials initials = new Initials();
|
|
initials.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setInitials(initials);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasInitials()) {
|
|
out.println("initials: " + contact.getInitials().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasInitials()) {
|
|
dest.setInitials(src.getInitials());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<initials>";
|
|
}
|
|
},
|
|
|
|
JOT(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Jot jot = new Jot();
|
|
jot.setValue(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
jot.setRel(Jot.Rel.valueOf(parser.get(PropertyName.REL).toUpperCase()));
|
|
}
|
|
contact.addJot(jot);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasJots()) {
|
|
out.println("jots:");
|
|
for (Jot jot : contact.getJots()) {
|
|
out.print(" " + jot.getValue());
|
|
if (jot.hasRel()) {
|
|
out.print(" rel:" + jot.getRel().toString().toLowerCase());
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasJots()) {
|
|
List<Jot> jots = dest.getJots();
|
|
jots.clear();
|
|
jots.addAll(src.getJots());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<jot>"
|
|
+ "[,rel:home|work|other|keywords|user]";
|
|
}
|
|
},
|
|
|
|
LANGUAGE(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Language language = new Language();
|
|
language.setLabel(parser.get(PropertyName.VALUE));
|
|
contact.addLanguage(language);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasLanguages()) {
|
|
out.println("languages:");
|
|
for (Language language : contact.getLanguages()) {
|
|
out.println(" " + language.getLabel());
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasLanguages()) {
|
|
List<Language> languages = dest.getLanguages();
|
|
languages.clear();
|
|
languages.addAll(src.getLanguages());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<language>";
|
|
}
|
|
},
|
|
|
|
WHERE {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
contact.setWhere(new Where(null, null, parser.get(PropertyName.VALUE)));
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasWhere()) {
|
|
out.println("where: " + contact.getWhere().getValueString());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasWhere()) {
|
|
dest.setWhere(src.getWhere());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<where>";
|
|
}
|
|
},
|
|
|
|
|
|
MAIDEN_NAME {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
MaidenName maidenName = new MaidenName();
|
|
maidenName.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setMaidenName(maidenName);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasMaidenName()) {
|
|
out.println("maiden name: " + contact.getMaidenName().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasMaidenName()) {
|
|
dest.setMaidenName(src.getMaidenName());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<maiden_name>";
|
|
}
|
|
},
|
|
|
|
MILEAGE {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Mileage mileage = new Mileage();
|
|
mileage.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setMileage(mileage);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasMileage()) {
|
|
out.println("mileage: " + contact.getMileage().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasMileage()) {
|
|
dest.setMileage(src.getMileage());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<mileage>";
|
|
}
|
|
},
|
|
|
|
NAME {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Name name = new Name();
|
|
name.setFullName(new FullName(parser.get(PropertyName.VALUE), null));
|
|
if (parser.has(PropertyName.GIVEN)) {
|
|
name.setGivenName(new GivenName(parser.get(PropertyName.GIVEN), null));
|
|
}
|
|
if (parser.has(PropertyName.FAMILY)) {
|
|
name.setFamilyName(
|
|
new FamilyName(parser.get(PropertyName.FAMILY), null));
|
|
}
|
|
if (parser.has(PropertyName.ADDITIONAL)) {
|
|
name.setAdditionalName(
|
|
new AdditionalName(parser.get(PropertyName.ADDITIONAL), null));
|
|
}
|
|
if (parser.has(PropertyName.PREFIX)) {
|
|
name.setNamePrefix(new NamePrefix(parser.get(PropertyName.PREFIX)));
|
|
}
|
|
if (parser.has(PropertyName.SUFFIX)) {
|
|
name.setNameSuffix(new NameSuffix(parser.get(PropertyName.SUFFIX)));
|
|
}
|
|
contact.setName(name);
|
|
}
|
|
|
|
public void parseGroup(ContactGroupEntry group, ElementParser parser) {
|
|
group.setTitle(new PlainTextConstruct(parser.get(PropertyName.VALUE)));
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasName()) {
|
|
out.println("structured name: ");
|
|
Name name = contact.getName();
|
|
if (name.hasFullName()) {
|
|
out.print(" full name: " + name.getFullName().getValue());
|
|
}
|
|
if (name.hasGivenName()) {
|
|
out.print(" given name: " + name.getGivenName().getValue());
|
|
}
|
|
if (name.hasFamilyName()) {
|
|
out.print(" family name: " + name.getFamilyName().getValue());
|
|
}
|
|
if (name.hasAdditionalName()) {
|
|
out.print(" additional name: " + name.getAdditionalName().getValue());
|
|
}
|
|
if (name.hasNamePrefix()) {
|
|
out.print(" prefix: " + name.getNamePrefix().getValue());
|
|
}
|
|
if (name.hasNameSuffix()) {
|
|
out.print(" suffix: " + name.getNameSuffix().getValue());
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasName()) {
|
|
dest.setName(src.getName());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<name>"
|
|
+ "[,given:<givenName]"
|
|
+ "[,family:<familyName>]"
|
|
+ "[,additional:additionalName]"
|
|
+ "[,prefix:<prefix>]"
|
|
+ "[,suffix:<suffix>]";
|
|
}
|
|
},
|
|
|
|
NICKNAME {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Nickname nickname = new Nickname();
|
|
nickname.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setNickname(nickname);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasNickname()) {
|
|
out.println("nickname: " + contact.getNickname().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasNickname()) {
|
|
dest.setNickname(src.getNickname());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<nickname>";
|
|
}
|
|
},
|
|
|
|
NOTES {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
contact.setContent(
|
|
new PlainTextConstruct(parser.get(PropertyName.VALUE)));
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.getContent() != null) {
|
|
out.println("notes: "
|
|
+ contact.getTextContent().getContent().getPlainText());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.getContent() != null) {
|
|
dest.setContent(src.getContent());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<notes>";
|
|
}
|
|
},
|
|
|
|
OCCUPATION {
|
|
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Occupation occupation = new Occupation();
|
|
occupation.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setOccupation(occupation);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasOccupation()) {
|
|
out.println("occupation: " + contact.getOccupation().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasOccupation()) {
|
|
dest.setOccupation(src.getOccupation());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<occupation>";
|
|
}
|
|
},
|
|
|
|
ORGANIZATION(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Organization org = new Organization();
|
|
org.setOrgName(new OrgName(parser.get(PropertyName.VALUE)));
|
|
if (parser.has(PropertyName.DEPARTMENT)) {
|
|
org.setOrgDepartment(
|
|
new OrgDepartment(parser.get(PropertyName.DEPARTMENT)));
|
|
}
|
|
if (parser.has(PropertyName.REL)) {
|
|
org.setRel(parser.get(PropertyName.REL));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
org.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
if (parser.has(PropertyName.TITLE)) {
|
|
org.setOrgTitle(new OrgTitle(parser.get(PropertyName.TITLE)));
|
|
}
|
|
if (parser.has(PropertyName.SYMBOL)) {
|
|
org.setOrgSymbol(new OrgSymbol(parser.get(PropertyName.SYMBOL)));
|
|
}
|
|
if (parser.has(PropertyName.DESCRIPTION)) {
|
|
org.setOrgJobDescription(
|
|
new OrgJobDescription(parser.get(PropertyName.DESCRIPTION)));
|
|
}
|
|
if (parser.has(PropertyName.WHERE)) {
|
|
Where where = new Where();
|
|
where.setValueString(parser.get(PropertyName.WHERE));
|
|
org.setWhere(where);
|
|
}
|
|
contact.addOrganization(org);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasOrganizations()) {
|
|
out.println("organizations:");
|
|
for (Organization organization : contact.getOrganizations()) {
|
|
out.print(" " + organization.getOrgName().getValue());
|
|
if (organization.hasRel()) {
|
|
out.print(" rel:" + organization.getRel());
|
|
}
|
|
if (organization.hasLabel()) {
|
|
out.print(" label:" + organization.getLabel());
|
|
}
|
|
if (organization.hasOrgDepartment()) {
|
|
out.print(" department:"
|
|
+ organization.getOrgDepartment().getValue());
|
|
}
|
|
if (organization.hasOrgTitle()) {
|
|
out.print(" title:" + organization.getOrgTitle().getValue());
|
|
}
|
|
if (organization.hasOrgSymbol()) {
|
|
out.print(" symbol:" + organization.getOrgSymbol().getValue());
|
|
}
|
|
if (organization.hasWhere()) {
|
|
out.print(" where:" + organization.getWhere().getValueString());
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasOrganizations()) {
|
|
List<Organization> organizations = dest.getOrganizations();
|
|
organizations.clear();
|
|
organizations.addAll(src.getOrganizations());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<name>"
|
|
+ "[,rel:<rel>]"
|
|
+ "[,label<label>]"
|
|
+ "[,primary:true|false]"
|
|
+ "[,department:<department>]"
|
|
+ "[,description:<description>]"
|
|
+ "[,symbol:<symbol>]"
|
|
+ "[,title:<title>]"
|
|
+ "[,where:<where>]";
|
|
}
|
|
},
|
|
|
|
PHONE(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
PhoneNumber phone = new PhoneNumber();
|
|
phone.setPhoneNumber(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
phone.setRel(parser.get(PropertyName.REL));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
phone.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
if (parser.has(PropertyName.URI)) {
|
|
phone.setUri(parser.get(PropertyName.URI));
|
|
}
|
|
if (parser.has(PropertyName.PRIMARY)) {
|
|
phone.setPrimary(parser.is(PropertyName.PRIMARY));
|
|
}
|
|
contact.addPhoneNumber(phone);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasPhoneNumbers()) {
|
|
out.println("phone numbers:");
|
|
for (PhoneNumber phone : contact.getPhoneNumbers()) {
|
|
out.print(" " + phone.getPhoneNumber());
|
|
if (phone.getRel() != null) {
|
|
out.print(" rel:" + phone.getRel());
|
|
}
|
|
if (phone.getLabel() != null) {
|
|
out.print(" label:" + phone.getLabel());
|
|
}
|
|
if (phone.getUri() != null) {
|
|
out.print(" uri:" + phone.getUri());
|
|
}
|
|
if (phone.getPrimary()) {
|
|
out.print(" (primary)");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasPhoneNumbers()) {
|
|
List<PhoneNumber> phoneNumbers = dest.getPhoneNumbers();
|
|
phoneNumbers.clear();
|
|
phoneNumbers.addAll(src.getPhoneNumbers());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<phone>"
|
|
+ "[,rel:<rel>]"
|
|
+ "[,label:<label>]"
|
|
+ "[,uri:<uri>]"
|
|
+ "[,primary:true|false]";
|
|
}
|
|
},
|
|
|
|
PRIORITY {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Priority priority = new Priority();
|
|
priority.setRel(
|
|
Priority.Rel.valueOf(parser.get(PropertyName.VALUE).toUpperCase()));
|
|
contact.setPriority(priority);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasPriority()) {
|
|
out.println("priority: "
|
|
+ contact.getPriority().getRel().toString().toLowerCase());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasPriority()) {
|
|
dest.setPriority(src.getPriority());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "low|normal|high";
|
|
}
|
|
},
|
|
|
|
RELATION(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Relation relation = new Relation();
|
|
relation.setValue(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
relation.setRel(
|
|
Relation.Rel.valueOf(parser.get(PropertyName.REL).toUpperCase()));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
relation.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
contact.addRelation(relation);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasRelations()) {
|
|
out.println("relations:");
|
|
for (Relation relation : contact.getRelations()) {
|
|
out.print(" " + relation.getValue());
|
|
if (relation.hasLabel()) {
|
|
out.print(" label:" + relation.getLabel());
|
|
} else if (relation.hasRel()) {
|
|
out.print(" rel:" + relation.getRel().toString().toLowerCase());
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasRelations()) {
|
|
List<Relation> relations = dest.getRelations();
|
|
relations.clear();
|
|
relations.addAll(src.getRelations());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<relation>"
|
|
+ "[,label:<label>]"
|
|
+ "[,rel:<rel>]";
|
|
}
|
|
},
|
|
|
|
SENSITIVITY {
|
|
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Sensitivity sensitivity = new Sensitivity();
|
|
sensitivity.setRel(
|
|
Sensitivity.Rel.valueOf(
|
|
parser.get(PropertyName.VALUE).toUpperCase()));
|
|
contact.setSensitivity(sensitivity);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasSensitivity()) {
|
|
out.println("sensitivity:"
|
|
+ contact.getSensitivity().getRel().toString().toLowerCase());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasSensitivity()) {
|
|
dest.setSensitivity(src.getSensitivity());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "confidental|normal|personal|private";
|
|
}
|
|
},
|
|
|
|
SHORT_NAME {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
ShortName shortName = new ShortName();
|
|
shortName.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setShortName(shortName);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasShortName()) {
|
|
out.println("short name:" + contact.getShortName().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasShortName()) {
|
|
dest.setShortName(src.getShortName());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<short_name>";
|
|
}
|
|
},
|
|
|
|
POSTAL(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
StructuredPostalAddress address = new StructuredPostalAddress();
|
|
if (parser.has(PropertyName.REL)) {
|
|
address.setRel(parser.get(PropertyName.REL));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
address.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
if (parser.has(PropertyName.PRIMARY)) {
|
|
address.setPrimary(parser.is(PropertyName.PRIMARY));
|
|
}
|
|
if (parser.has(PropertyName.CITY)) {
|
|
address.setCity(new City(parser.get(PropertyName.CITY)));
|
|
}
|
|
if (parser.has(PropertyName.COUNTRY)) {
|
|
// Don't care about country code
|
|
address.setCountry(new Country(null, parser.get(PropertyName.COUNTRY)));
|
|
}
|
|
if (parser.has(PropertyName.FORMATTED)) {
|
|
address.setFormattedAddress(
|
|
new FormattedAddress(parser.get(PropertyName.FORMATTED)));
|
|
}
|
|
if (parser.has(PropertyName.NEIGHBORHOOD)) {
|
|
address.setNeighborhood(
|
|
new Neighborhood(parser.get(PropertyName.NEIGHBORHOOD)));
|
|
}
|
|
if (parser.has(PropertyName.POBOX)) {
|
|
address.setPobox(new PoBox(parser.get(PropertyName.POBOX)));
|
|
}
|
|
if (parser.has(PropertyName.POSTCODE)) {
|
|
address.setPostcode(new PostCode(parser.get(PropertyName.POSTCODE)));
|
|
}
|
|
if (parser.has(PropertyName.REGION)) {
|
|
address.setRegion(new Region(parser.get(PropertyName.REGION)));
|
|
}
|
|
if (parser.has(PropertyName.STREET)) {
|
|
address.setStreet(new Street(parser.get(PropertyName.STREET)));
|
|
}
|
|
contact.addStructuredPostalAddress(address);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasStructuredPostalAddresses()) {
|
|
out.println("addresses:");
|
|
for (StructuredPostalAddress address
|
|
: contact.getStructuredPostalAddresses()) {
|
|
out.print(" ");
|
|
if (address.hasRel()) {
|
|
out.print(" rel:" + address.getRel());
|
|
}
|
|
if (address.hasLabel()) {
|
|
out.print(" label:" + address.getLabel());
|
|
}
|
|
if (address.hasCity()) {
|
|
out.print(" city:" + address.getCity().getValue());
|
|
}
|
|
if (address.hasCountry()) {
|
|
out.print(" country:" + address.getCountry().getValue());
|
|
}
|
|
if (address.hasFormattedAddress()) {
|
|
out.print(" formatted:" + address.getFormattedAddress().getValue());
|
|
}
|
|
if (address.hasNeighborhood()) {
|
|
out.print(" neighborhood:" + address.getNeighborhood().getValue());
|
|
}
|
|
if (address.hasPobox()) {
|
|
out.print(" pobox:" + address.getPobox().getValue());
|
|
}
|
|
if (address.hasPostcode()) {
|
|
out.print(" postcode:" + address.getPostcode().getValue());
|
|
}
|
|
if (address.hasRegion()) {
|
|
out.print(" region:" + address.getRegion().getValue());
|
|
}
|
|
if (address.hasStreet()) {
|
|
out.print(" street:" + address.getStreet().getValue());
|
|
}
|
|
if (address.getPrimary()) {
|
|
out.print(" (primary)");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasStructuredPostalAddresses()) {
|
|
List<StructuredPostalAddress> structuredPostalAddresses =
|
|
dest.getStructuredPostalAddresses();
|
|
structuredPostalAddresses.clear();
|
|
structuredPostalAddresses.addAll(src.getStructuredPostalAddresses());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "[rel:<rel>]"
|
|
+ "[,label:<label>]"
|
|
+ "[,primary:true|false]"
|
|
+ "[,city:<city>]"
|
|
+ "[,country:<country>]"
|
|
+ "[,formatted:<formattedAddress>]"
|
|
+ "[,neighborhood:<neighborhood>]"
|
|
+ "[,pobox:<poBox>]"
|
|
+ "[,postcode:<postCode>]"
|
|
+ "[,region:<region>]"
|
|
+ "[,street:<street>]";
|
|
}
|
|
},
|
|
|
|
SUBJECT {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Subject subject = new Subject();
|
|
subject.setValue(parser.get(PropertyName.VALUE));
|
|
contact.setSubject(subject);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasSubject()) {
|
|
out.println("subject:" + contact.getSubject().getValue());
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasSubject()) {
|
|
dest.setSubject(src.getSubject());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<subject>";
|
|
}
|
|
},
|
|
|
|
USER_DEFINED_FIELD(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
UserDefinedField userDefinedField = new UserDefinedField();
|
|
userDefinedField.setValue(parser.get(PropertyName.VALUE));
|
|
userDefinedField.setKey(parser.get(PropertyName.KEY));
|
|
contact.addUserDefinedField(userDefinedField);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasUserDefinedFields()) {
|
|
out.println("user defined fields:");
|
|
for (UserDefinedField field : contact.getUserDefinedFields()) {
|
|
out.println(" " + field.getValue() + " key: " + field.getKey());
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasUserDefinedFields()) {
|
|
List<UserDefinedField> userDefinedFields = dest.getUserDefinedFields();
|
|
userDefinedFields.clear();
|
|
userDefinedFields.addAll(src.getUserDefinedFields());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<value>,key:<key>";
|
|
}
|
|
},
|
|
|
|
WEBSITE(true) {
|
|
public void parse(ContactEntry contact, ElementParser parser) {
|
|
Website website = new Website();
|
|
website.setHref(parser.get(PropertyName.VALUE));
|
|
if (parser.has(PropertyName.REL)) {
|
|
website.setRel(
|
|
Website.Rel.valueOf(parser.get(PropertyName.REL).toLowerCase()));
|
|
}
|
|
if (parser.has(PropertyName.LABEL)) {
|
|
website.setLabel(parser.get(PropertyName.LABEL));
|
|
}
|
|
if (parser.has(PropertyName.PRIMARY)) {
|
|
website.setPrimary(parser.is(PropertyName.PRIMARY));
|
|
}
|
|
contact.addWebsite(website);
|
|
}
|
|
|
|
public void print(PrintStream out, ContactEntry contact) {
|
|
if (contact.hasWebsites()) {
|
|
out.println("websites:");
|
|
for (Website website : contact.getWebsites()) {
|
|
out.print(" " + website.getHref());
|
|
if (website.hasRel()) {
|
|
out.print(" ref:" + website.getRel().toString().toLowerCase());
|
|
}
|
|
if (website.hasLabel()) {
|
|
out.print(" label:" + website.getLabel());
|
|
}
|
|
if (website.getPrimary()) {
|
|
out.print(" (primary)");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update(ContactEntry dest, ContactEntry src) {
|
|
if (src.hasWebsites()) {
|
|
List<Website> websites = dest.getWebsites();
|
|
websites.clear();
|
|
websites.addAll(src.getWebsites());
|
|
}
|
|
}
|
|
|
|
public String getUsage() {
|
|
return "<url>"
|
|
+ "[,rel:<rel>]"
|
|
+ "[label:<label>]"
|
|
+ "[,primary:true|false]";
|
|
}
|
|
};
|
|
|
|
// Flag to indicate if the element can be repeated.
|
|
private final boolean repetable;
|
|
|
|
// some regexp for parameter parsing/checking
|
|
private final static Pattern REPEATED_ARG_PATTERN
|
|
= Pattern.compile("^(\\D+)\\d*$");
|
|
|
|
// Constructors.
|
|
private ElementHelper(boolean repetable) { this.repetable = repetable; }
|
|
private ElementHelper() { this(false); }
|
|
|
|
/**
|
|
* The default implementation just throws an UnsuportedOperationException, and
|
|
* only those helpers override it, what are used in parsing groups elements.
|
|
*
|
|
* @param group the group the parsed element should be added or set.
|
|
* @param parser the parser used for the parsing of the description.
|
|
*
|
|
* @throws UnsupportedOperationException in case the specific element can not
|
|
* be set on a ContactGroupEntry.
|
|
*
|
|
* @see ElementParser
|
|
*/
|
|
public void parseGroup(ContactGroupEntry group, ElementParser parser) {
|
|
throw new UnsupportedOperationException("parseGroup not supported for"
|
|
+ this.toString().toLowerCase() + " element");
|
|
}
|
|
|
|
private static ElementHelper find(String name)
|
|
throws IllegalArgumentException {
|
|
Matcher m = REPEATED_ARG_PATTERN.matcher(name);
|
|
if (!m.matches()) {
|
|
throw new IllegalArgumentException("badly formated parameter: " + name);
|
|
}
|
|
try {
|
|
return valueOf(m.group(1).toUpperCase());
|
|
} catch (IllegalArgumentException ex) {
|
|
throw new IllegalArgumentException("unknown parameter: " + name);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Builds a contact from the list of element descriptions.
|
|
* It delegates the element specific parsing to the appropriate helper
|
|
* instances. The actual element type is matched by the name of the enum
|
|
* instance, so the element names specified in the parameters should (almost)
|
|
* match the name of enum instances. The exceptions are those elements what
|
|
* can be repeated, when the parameter format is "name<n>".* Due to this
|
|
* formating convention we cannot use directly the valueOf() facility of the
|
|
* enum.
|
|
*
|
|
* @param contact the contact to build.
|
|
* @param parameters list of element descriptions.
|
|
*
|
|
*/
|
|
public static void buildContact(ContactEntry contact,
|
|
List<String> parameters) {
|
|
for (String string : parameters) {
|
|
if (!string.startsWith("--")) {
|
|
throw new IllegalArgumentException("unknown argument: " + string);
|
|
}
|
|
String param = string.substring(2);
|
|
String params[] = param.split("=", 2);
|
|
if (params.length != 2) {
|
|
throw new IllegalArgumentException("badly formated argument: "
|
|
+ string);
|
|
}
|
|
ElementHelper helper = find(params[0]);
|
|
if (helper == null) {
|
|
throw new IllegalArgumentException("unknown argument: " + string);
|
|
}
|
|
helper.parse(contact, new ElementParser(params[1]));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Builds a group from the list of element descriptions.
|
|
* It delegates the element specific parsing to the appropriate helper
|
|
* instances. The actual element type is matched by the name of the enum
|
|
* instance, so the element names specified in the parameters should (almost)
|
|
* match the name of enum instances. The exceptions are those elements what
|
|
* can be repeated, when the parameter format is "name<n>".* Due to this
|
|
* formating convention we cannot use directly the valueOf() facility of the
|
|
* enum.
|
|
*
|
|
* @param group the group to build.
|
|
* @param parameters list of element descriptions.
|
|
*
|
|
*/
|
|
public static void buildGroup(ContactGroupEntry group,
|
|
List<String> parameters) {
|
|
for (String string : parameters) {
|
|
if (!string.startsWith("--")) {
|
|
throw new IllegalArgumentException("unknown argument: " + string);
|
|
}
|
|
String param = string.substring(2);
|
|
String params[] = param.split("=", 2);
|
|
if (params.length != 2) {
|
|
throw new IllegalArgumentException("badly formated argument: "
|
|
+ string);
|
|
}
|
|
ElementHelper helper = find(params[0]);
|
|
if (helper == null) {
|
|
throw new IllegalArgumentException("unknown argument: " + string);
|
|
}
|
|
helper.parseGroup(group, new ElementParser(params[1]));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates the elements of a contact entry based on the elements of another
|
|
* contact entry.
|
|
* Those elements are replaced in the destination contact entry what are
|
|
* exists in the source contact. Those elements not contained by the source
|
|
* contact are left unchanged on the destination contact.
|
|
*
|
|
* @param dest the destination contact to be updated.
|
|
* @param src the source contact
|
|
*/
|
|
public static void updateContact(ContactEntry dest, ContactEntry src) {
|
|
for (ElementHelper helper : values()) {
|
|
helper.update(dest, src);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Prints the content of the contact in a human readable form.
|
|
*
|
|
* @param out the stream to print to.
|
|
* @param contact the contact to be printed out.
|
|
*/
|
|
public static void printContact(PrintStream out, ContactEntry contact) {
|
|
for (ElementHelper helper : values()) {
|
|
helper.print(out, contact);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gives the usage help text of all elements.
|
|
*
|
|
* @return the usage help text for all elements.
|
|
*/
|
|
public static String getUsageString() {
|
|
StringBuffer buffer = new StringBuffer();
|
|
for (ElementHelper helper : values()) {
|
|
buffer.append(" --" + helper.toString().toLowerCase());
|
|
if (helper.repetable) {
|
|
buffer.append("<n>");
|
|
}
|
|
buffer.append("=" + helper.getUsage() + "\n");
|
|
}
|
|
buffer.append(
|
|
"Notes! <n> is a unique number for the field - several fields\n"
|
|
+ " of the same type can be present (example: im1, im2, im3).\n"
|
|
+ " Available rels and protocols can be looked up in the \n"
|
|
+ " feed documentation.\n");
|
|
return buffer.toString();
|
|
}
|
|
}
|