View Javadoc
1   package org.argeo.people.core;
2   
3   import static org.argeo.people.ContactValueCatalogs.ARRAY_ORG_PHONES;
4   
5   import java.awt.Image;
6   
7   import javax.jcr.Node;
8   import javax.jcr.RepositoryException;
9   
10  import org.argeo.connect.util.ConnectJcrUtils;
11  import org.argeo.people.ContactService;
12  import org.argeo.people.ContactValueCatalogs;
13  import org.argeo.people.PeopleException;
14  import org.argeo.people.PeopleNames;
15  import org.argeo.people.PeopleTypes;
16  
17  /**
18   * Canonical implementation of the People's {@link ContactService}. Among
19   * others, it defines the various possible values of a given contact property
20   * given the already defined property of this contact instance
21   */
22  public class ContactServiceImpl implements ContactService, PeopleNames {
23  
24  	public ContactServiceImpl() {
25  	}
26  
27  	@Override
28  	public String[] getKnownContactTypes() {
29  		return PeopleTypes.KNOWN_CONTACT_TYPES;
30  	}
31  
32  	@Override
33  	public String[] getKnownContactLabels() {
34  		return ContactValueCatalogs.ARRAY_CONTACT_TYPES;
35  	}
36  
37  	@Override
38  	public String[] getContactTypeLabels(Node entity) {
39  		if (ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_PERSON)
40  				|| ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_ORG))
41  			return ContactValueCatalogs.ARRAY_CONTACT_TYPES;
42  		else
43  			return null;
44  	}
45  
46  	@Override
47  	public String[] getContactPossibleCategories(Node contact) {
48  		try {
49  			// Retrieves parent entity to enable decision
50  			Node entity = contact.getParent().getParent();
51  			boolean isPro = contact.isNodeType(PeopleTypes.PEOPLE_CONTACT_REF);
52  
53  			if (contact.isNodeType(PeopleTypes.PEOPLE_PHONE)) {
54  				if (entity.isNodeType(PeopleTypes.PEOPLE_PERSON)) {
55  					if (isPro)
56  						return ContactValueCatalogs.ARRAY_PERSON_PRO_PHONES;
57  					else
58  						return ContactValueCatalogs.ARRAY_PERSON_PRIVATE_PHONES;
59  				} else if (entity.isNodeType(PeopleTypes.PEOPLE_ORG))
60  					return ContactValueCatalogs.ARRAY_ORG_PHONES;
61  			} else if (contact.isNodeType(PeopleTypes.PEOPLE_POSTAL_ADDRESS)) {
62  				if (entity.isNodeType(PeopleTypes.PEOPLE_PERSON))
63  					if (isPro)
64  						return ContactValueCatalogs.ARRAY_PERSON_WORK_ADDRESSES;
65  					else
66  						return ContactValueCatalogs.ARRAY_PERSON_HOME_ADDRESSES;
67  				else if (entity.isNodeType(PeopleTypes.PEOPLE_ORG))
68  					return ContactValueCatalogs.ARRAY_ORG_ADDRESSES;
69  			} else if (contact.isNodeType(PeopleTypes.PEOPLE_SOCIAL_MEDIA))
70  				return ContactValueCatalogs.ARRAY_SOCIAL_MEDIA;
71  			else if (contact.isNodeType(PeopleTypes.PEOPLE_IMPP))
72  				return ContactValueCatalogs.ARRAY_IMPP;
73  			return new String[0];
74  		} catch (RepositoryException re) {
75  			throw new PeopleException("Unable to get category list for " + contact, re);
76  		}
77  	}
78  
79  	@Override
80  	public String[] getContactCategories(String contactableType, String contactType, boolean isPro) {
81  
82  		if (PeopleTypes.PEOPLE_TELEPHONE_NUMBER.equals(contactType)) {
83  			if (PeopleTypes.PEOPLE_PERSON.equals(contactableType)) {
84  				if (isPro)
85  					return ContactValueCatalogs.ARRAY_PERSON_PRO_PHONES;
86  				else
87  					return ContactValueCatalogs.ARRAY_PERSON_PRIVATE_PHONES;
88  			} else if (PeopleTypes.PEOPLE_ORG.equals(contactableType))
89  				return ARRAY_ORG_PHONES;
90  		} else if (PeopleTypes.PEOPLE_MOBILE.equals(contactType)) {
91  			return ContactValueCatalogs.ARRAY_MOBILES;
92  		} else if (PeopleTypes.PEOPLE_FAX.equals(contactType)) {
93  			return ContactValueCatalogs.ARRAY_FAXES;
94  		} else if (PeopleTypes.PEOPLE_POSTAL_ADDRESS.equals(contactType)) {
95  			if (PeopleTypes.PEOPLE_PERSON.equals(contactableType)) {
96  				if (isPro)
97  					return ContactValueCatalogs.ARRAY_PERSON_WORK_ADDRESSES;
98  				else
99  					return ContactValueCatalogs.ARRAY_PERSON_HOME_ADDRESSES;
100 			} else if (PeopleTypes.PEOPLE_ORG.equals(contactableType))
101 				return ContactValueCatalogs.ARRAY_ORG_ADDRESSES;
102 		} else if (PeopleTypes.PEOPLE_SOCIAL_MEDIA.equals(contactType))
103 			return ContactValueCatalogs.ARRAY_SOCIAL_MEDIA;
104 		else if (PeopleTypes.PEOPLE_IMPP.equals(contactType))
105 			return ContactValueCatalogs.ARRAY_IMPP;
106 		return null;
107 	}
108 
109 	@Override
110 	public Image getContactIcon(Node contact) {
111 		return null;
112 	}
113 }