View Javadoc
1   package org.argeo.people.web.parts;
2   
3   import javax.jcr.Node;
4   import javax.jcr.Property;
5   import javax.jcr.RepositoryException;
6   
7   import org.argeo.cms.ui.CmsUiProvider;
8   import org.argeo.cms.util.CmsUtils;
9   import org.argeo.connect.util.ConnectJcrUtils;
10  import org.argeo.people.ContactValueCatalogs;
11  import org.argeo.people.PeopleTypes;
12  import org.argeo.people.util.PeopleJcrUtils;
13  import org.eclipse.rap.rwt.RWT;
14  import org.eclipse.swt.SWT;
15  import org.eclipse.swt.events.SelectionAdapter;
16  import org.eclipse.swt.events.SelectionEvent;
17  import org.eclipse.swt.layout.RowLayout;
18  import org.eclipse.swt.widgets.Button;
19  import org.eclipse.swt.widgets.Composite;
20  import org.eclipse.swt.widgets.Control;
21  
22  /** Manages button for a people:contact node */
23  public class ContactButtonsPart implements CmsUiProvider {
24  
25  	@Override
26  	public Control createUi(Composite parent, Node context) throws RepositoryException {
27  		parent.setLayout(new RowLayout(SWT.HORIZONTAL));
28  
29  		createCategoryButton(parent, context);
30  
31  		configurePrimaryButton(createPrimaryButton(parent, context));
32  
33  		// Deletion if needed
34  		// configureDeleteButton(createDeleteButton(buttCmp));
35  
36  		return parent;
37  	}
38  
39  	private Button createCategoryButton(Composite parent, Node context) throws RepositoryException {
40  		Button btn = new Button(parent, SWT.NONE);
41  		btn.setLayoutData(CmsUtils.rowData16px());
42  		btn.setData(RWT.CUSTOM_VARIANT, getCssStyle(context));
43  		return btn;
44  	}
45  
46  	private String getCssStyle(Node entity) throws RepositoryException {
47  
48  		Node contactable = entity.getParent().getParent();
49  		boolean isPro = ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_CONTACT_REF);
50  		// EMAIL
51  		if (entity.isNodeType(PeopleTypes.PEOPLE_MAIL)) {
52  			return "people_icon_email";
53  		}
54  		// PHONE
55  		else if (entity.isNodeType(PeopleTypes.PEOPLE_PHONE))
56  			return "people_icon_phone";
57  		else if (entity.isNodeType(PeopleTypes.PEOPLE_MOBILE))
58  			return "people_icon_mobile";
59  		else if (entity.isNodeType(PeopleTypes.PEOPLE_FAX))
60  			return "people_icon_fax";		
61  		// ADDRESS
62  		else if (entity.isNodeType(PeopleTypes.PEOPLE_POSTAL_ADDRESS)) {
63  			if (contactable.isNodeType(PeopleTypes.PEOPLE_PERSON )&& isPro)
64  					return "people_icon_work";
65  			return "people_icon_address";
66  		}
67  		// URL
68  		else if (entity.isNodeType(PeopleTypes.PEOPLE_URL)) {
69  			// return ContactImages.PRIVATE_HOME_PAGE;
70  			return "people_icon_url";
71  		}
72  		// SOCIAL MEDIA
73  		else if (entity.isNodeType(PeopleTypes.PEOPLE_SOCIAL_MEDIA)) {
74  			String category = ConnectJcrUtils.get(entity, Property.JCR_TITLE);
75  			if (ContactValueCatalogs.CONTACT_CAT_GOOGLEPLUS.equals(category))
76  				return "people_icon_google_plus";
77  			else if (ContactValueCatalogs.CONTACT_CAT_FACEBOOK.equals(category))
78  				return "people_icon_facebook";
79  			else if (ContactValueCatalogs.CONTACT_CAT_LINKEDIN.equals(category))
80  				return "people_icon_linkedin";
81  			else if (ContactValueCatalogs.CONTACT_CAT_TWITTER.equals(category))
82  				return "people_icon_twitter";
83  			else if (ContactValueCatalogs.CONTACT_CAT_XING.equals(category))
84  				return "people_icon_xing";
85  			return "people_icon_social_media";
86  		}
87  		// // IMPP
88  		else if (entity.isNodeType(PeopleTypes.PEOPLE_IMPP)) {
89  			return "people_icon_impp";
90  		}
91  		return null;
92  	}
93  
94  	@SuppressWarnings("unused")
95  	private Button createDeleteButton(Composite parent, Node context) {
96  		Button btn = new Button(parent, SWT.NONE);
97  		btn.setLayoutData(CmsUtils.rowData16px());
98  		btn.setData(RWT.CUSTOM_VARIANT, "cms_icon_delete");
99  		return btn;
100 	}
101 
102 	private Button createPrimaryButton(Composite parent, Node context) throws RepositoryException {
103 		Button btn = new Button(parent, SWT.NONE);
104 		btn.setLayoutData(CmsUtils.rowData16px());
105 		// update image
106 		boolean isPrimary = PeopleJcrUtils.isPrimary(context.getParent().getParent(), context);
107 
108 		if (isPrimary)
109 			btn.setData(RWT.CUSTOM_VARIANT, "people_icon_primary");
110 		else
111 			btn.setData(RWT.CUSTOM_VARIANT, "people_icon_not_primary");
112 		return btn;
113 	}
114 
115 	@SuppressWarnings("unused")
116 	private void configureDeleteButton(final Button btn) {
117 		btn.addSelectionListener(new SelectionAdapter() {
118 			private static final long serialVersionUID = 1L;
119 
120 			@Override
121 			public void widgetSelected(final SelectionEvent event) {
122 				// TODO implement this
123 				// try {
124 				// // update primary cache
125 				// if (PeopleJcrUtils.isPrimary(parentVersionableNode,
126 				// contactNode))
127 				// PeopleJcrUtils.updatePrimaryCache(peopleService,
128 				// parentVersionableNode, contactNode, false);
129 				//
130 				// contactNode.remove();
131 				// } catch (RepositoryException e) {
132 				// throw new PeopleException("unable to initialise deletion",
133 				// e);
134 				// }
135 			}
136 		});
137 	}
138 
139 	private void configurePrimaryButton(final Button btn) {
140 		btn.addSelectionListener(new SelectionAdapter() {
141 			private static final long serialVersionUID = 1L;
142 
143 			@Override
144 			public void widgetSelected(final SelectionEvent event) {
145 				// TODO implement this
146 				// boolean hasChanged = PeopleJcrUtils.markAsPrimary(
147 				// peopleService, parentVersionableNode, contactNode);
148 
149 			}
150 		});
151 	}
152 }