View Javadoc
1   package org.argeo.people.e4;
2   
3   import javax.jcr.Node;
4   import javax.jcr.Property;
5   import javax.jcr.RepositoryException;
6   
7   import org.argeo.connect.UserAdminService;
8   import org.argeo.connect.e4.AppE4Service;
9   import org.argeo.connect.resources.ResourcesService;
10  import org.argeo.connect.ui.ConnectImages;
11  import org.argeo.connect.util.ConnectJcrUtils;
12  import org.argeo.people.ContactValueCatalogs;
13  import org.argeo.people.PeopleException;
14  import org.argeo.people.PeopleService;
15  import org.argeo.people.PeopleTypes;
16  import org.argeo.people.ui.PeopleWorkbenchService;
17  import org.argeo.people.ui.dialogs.NewOrgWizard;
18  import org.argeo.people.ui.dialogs.NewUserWizard;
19  import org.eclipse.jface.wizard.Wizard;
20  import org.eclipse.swt.graphics.Image;
21  
22  /**
23   * Centralise here the definition of context specific parameter (for instance
24   * the name of the command to open editors so that it is easily extended by
25   * specific extensions
26   */
27  public class PeopleE4Service implements PeopleWorkbenchService, AppE4Service {
28  	private UserAdminService userAdminService;
29  	private PeopleService peopleService;
30  	private ResourcesService resourcesService;
31  
32  	@Override
33  	public String getEntityEditorId(Node curNode) {
34  		try {
35  			if (curNode.isNodeType(PeopleTypes.PEOPLE_MAILING_LIST)) {
36  				// return MailingListEditor.ID;
37  			} else if (curNode.isNodeType(PeopleTypes.PEOPLE_PERSON)) {
38  				return "org.argeo.suite.e4.partdescriptor.personEditor";
39  			} else if (curNode.isNodeType(PeopleTypes.PEOPLE_ORG)) {
40  				return "org.argeo.suite.e4.partdescriptor.orgEditor";
41  			} else
42  				return null;
43  		} catch (RepositoryException re) {
44  			throw new PeopleException("Unable to open editor for node", re);
45  		}
46  		return null;
47  	}
48  
49  	@Override
50  	public String getSearchEntityEditorId(String nodeType) {
51  		if (PeopleTypes.PEOPLE_PERSON.equals(nodeType) || PeopleTypes.PEOPLE_ORG.equals(nodeType)
52  				|| PeopleTypes.PEOPLE_MAILING_LIST.equals(nodeType))
53  			return "org.argeo.suite.e4.partdescriptor.searchEntityPart";
54  		return null;
55  	}
56  
57  	@Override
58  	public Image getIconForType(Node entity) {
59  		try {
60  			if (entity.isNodeType(PeopleTypes.PEOPLE_PERSON))
61  				return ConnectImages.PERSON;
62  			else if (entity.isNodeType(PeopleTypes.PEOPLE_ORG))
63  				return ConnectImages.ORG;
64  			else if (entity.isNodeType(PeopleTypes.PEOPLE_MAILING_LIST))
65  				return ConnectImages.MAILING_LIST;
66  			else if (entity.isNodeType(PeopleTypes.PEOPLE_CONTACT))
67  				return getContactIcon(entity);
68  			else
69  				return null;
70  		} catch (RepositoryException re) {
71  			throw new PeopleException("Unable to get image for node", re);
72  		}
73  	}
74  
75  	@Override
76  	public Wizard getCreationWizard(Node node) {
77  		if (ConnectJcrUtils.isNodeType(node, PeopleTypes.PEOPLE_PERSON))
78  			return new NewUserWizard(node, peopleService, resourcesService);
79  		else if (ConnectJcrUtils.isNodeType(node, PeopleTypes.PEOPLE_ORG))
80  			return new NewOrgWizard(node, peopleService, resourcesService);
81  		else
82  			return null;
83  		// throw new PeopleException("No defined wizard for node " + node);
84  	}
85  
86  	/**
87  	 * Specific management of contact icons. Might be overridden by client
88  	 * application
89  	 */
90  	protected Image getContactIcon(Node entity) throws RepositoryException {
91  		Node contactable = entity.getParent().getParent();
92  		String category = ConnectJcrUtils.get(entity, Property.JCR_TITLE);
93  
94  		// EMAIL
95  		if (entity.isNodeType(PeopleTypes.PEOPLE_MAIL)) {
96  			return ConnectImages.DEFAULT_MAIL;
97  		}
98  		// PHONES
99  		else if (entity.isNodeType(PeopleTypes.PEOPLE_MOBILE))
100 			return ConnectImages.MOBILE;
101 		else if (entity.isNodeType(PeopleTypes.PEOPLE_FAX))
102 			return ConnectImages.FAX;
103 		else if (entity.isNodeType(PeopleTypes.PEOPLE_TELEPHONE_NUMBER) || entity.isNodeType(PeopleTypes.PEOPLE_PHONE))
104 			return ConnectImages.DEFAULT_PHONE;
105 		// ADDRESS
106 		else if (entity.isNodeType(PeopleTypes.PEOPLE_POSTAL_ADDRESS)) {
107 			if (contactable.isNodeType(PeopleTypes.PEOPLE_PERSON))
108 				if (entity.isNodeType(PeopleTypes.PEOPLE_CONTACT_REF))
109 					return ConnectImages.WORK;
110 				else
111 					return ConnectImages.DEFAULT_ADDRESS;
112 			else
113 				return ConnectImages.WORK;
114 		}
115 		// URL
116 		else if (entity.isNodeType(PeopleTypes.PEOPLE_URL)) {
117 			// return ContactImages.PRIVATE_HOME_PAGE;
118 			return ConnectImages.DEFAULT_URL;
119 		}
120 		// SOCIAL MEDIA
121 		else if (entity.isNodeType(PeopleTypes.PEOPLE_SOCIAL_MEDIA)) {
122 			if (ContactValueCatalogs.CONTACT_CAT_GOOGLEPLUS.equals(category))
123 				return ConnectImages.GOOGLEPLUS;
124 			else if (ContactValueCatalogs.CONTACT_CAT_FACEBOOK.equals(category))
125 				return ConnectImages.FACEBOOK;
126 			else if (ContactValueCatalogs.CONTACT_CAT_LINKEDIN.equals(category))
127 				return ConnectImages.LINKEDIN;
128 			else if (ContactValueCatalogs.CONTACT_CAT_XING.equals(category))
129 				return ConnectImages.XING;
130 			return ConnectImages.DEFAULT_SOCIAL_MEDIA;
131 		}
132 		// IMPP
133 		else if (entity.isNodeType(PeopleTypes.PEOPLE_IMPP)) {
134 			return ConnectImages.DEFAULT_IMPP;
135 		}
136 		return null;
137 	}
138 
139 	public void setUserAdminService(UserAdminService userAdminService) {
140 		this.userAdminService = userAdminService;
141 	}
142 
143 	public void setPeopleService(PeopleService peopleService) {
144 		this.peopleService = peopleService;
145 	}
146 
147 	public void setResourcesService(ResourcesService resourcesService) {
148 		this.resourcesService = resourcesService;
149 	}
150 
151 }