View Javadoc
1   package org.argeo.people.ui.composites;
2   
3   import javax.jcr.Node;
4   import javax.jcr.Property;
5   import javax.jcr.PropertyType;
6   
7   import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
8   import org.argeo.cms.ui.eclipse.forms.FormToolkit;
9   import org.argeo.cms.util.CmsUtils;
10  import org.argeo.connect.resources.ResourcesService;
11  import org.argeo.connect.ui.ConnectEditor;
12  import org.argeo.connect.ui.ConnectUiUtils;
13  import org.argeo.connect.ui.ConnectWorkbenchUtils;
14  import org.argeo.connect.ui.SystemWorkbenchService;
15  import org.argeo.connect.util.ConnectJcrUtils;
16  import org.argeo.eclipse.ui.EclipseUiUtils;
17  import org.argeo.people.PeopleNames;
18  import org.argeo.people.PeopleService;
19  import org.argeo.people.PeopleTypes;
20  import org.argeo.people.ui.PeopleMsg;
21  import org.argeo.people.ui.PeopleUiSnippets;
22  import org.eclipse.swt.SWT;
23  import org.eclipse.swt.layout.GridData;
24  import org.eclipse.swt.layout.GridLayout;
25  import org.eclipse.swt.layout.RowData;
26  import org.eclipse.swt.layout.RowLayout;
27  import org.eclipse.swt.widgets.Combo;
28  import org.eclipse.swt.widgets.Composite;
29  import org.eclipse.swt.widgets.Label;
30  import org.eclipse.swt.widgets.Text;
31  //import org.eclipse.ui.forms.AbstractFormPart;
32  //import org.eclipse.ui.forms.widgets.FormToolkit;
33  
34  /**
35   * Simple widget composite to display and edit contact information. Must be
36   * disposed and re-created when the corresponding form part refreshes
37   */
38  public class ContactComposite extends Composite {
39  	private static final long serialVersionUID = -789885142022513273L;
40  
41  	private final ResourcesService resourcesService;
42  	private final PeopleService peopleService;
43  	private final SystemWorkbenchService systemWorkbenchService;
44  	private final Node contactNode;
45  	private final Node parentVersionableNode;
46  
47  	private final ConnectEditor editor;
48  	private final FormToolkit toolkit;
49  	private final AbstractFormPart formPart;
50  	private final boolean isCheckedOut;
51  
52  	public ContactComposite(Composite parent, int style, ConnectEditor editor, AbstractFormPart formPart,
53  			Node contactNode, Node parentVersionableNode, ResourcesService resourcesService,
54  			PeopleService peopleService, SystemWorkbenchService systemWorkbenchService) {
55  		super(parent, style);
56  		this.resourcesService = resourcesService;
57  		this.peopleService = peopleService;
58  		this.systemWorkbenchService = systemWorkbenchService;
59  		this.contactNode = contactNode;
60  		this.parentVersionableNode = parentVersionableNode;
61  
62  		this.editor = editor;
63  		this.toolkit = editor.getFormToolkit();
64  		this.formPart = formPart;
65  		this.isCheckedOut = editor.isEditing();
66  		populate();
67  	}
68  
69  	private void populate() {
70  		// Initialization
71  		Composite parent = this;
72  		parent.setLayout(ConnectUiUtils.noSpaceGridLayout(2));
73  
74  		// buttons
75  		Composite buttCmp = new ContactButtonsComposite(editor, formPart, parent, SWT.NO_FOCUS, contactNode,
76  				parentVersionableNode, resourcesService, peopleService, systemWorkbenchService);
77  		toolkit.adapt(buttCmp, false, false);
78  		buttCmp.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
79  
80  		Composite dataCmp = toolkit.createComposite(parent, SWT.NO_FOCUS);
81  		dataCmp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
82  
83  		if (!isCheckedOut) // READ ONLY
84  			populateReadOnlyPanel(dataCmp);
85  		else
86  			populateEditPanel(dataCmp);
87  	}
88  
89  	protected void populateReadOnlyPanel(final Composite readOnlyPanel) {
90  		readOnlyPanel.setLayout(new GridLayout());
91  		final Label readOnlyInfoLbl = toolkit.createLabel(readOnlyPanel, "", SWT.WRAP);
92  		CmsUtils.markup(readOnlyInfoLbl);
93  		String addressHtml = PeopleUiSnippets.getContactDisplaySnippet(resourcesService, contactNode);
94  		readOnlyInfoLbl.setText(addressHtml);
95  	}
96  
97  	protected void populateEditPanel(final Composite parent) {
98  		RowLayout rl = new RowLayout(SWT.WRAP);
99  		rl.type = SWT.HORIZONTAL;
100 		rl.center = true;
101 		rl.marginWidth = 0;
102 		parent.setLayout(rl);
103 
104 		boolean hasCat = !(ConnectJcrUtils.isNodeType(contactNode, PeopleTypes.PEOPLE_URL)
105 				|| ConnectJcrUtils.isNodeType(contactNode, PeopleTypes.PEOPLE_MAIL));
106 
107 		// The widgets
108 		final Text valueTxt = createAddressTxt(parent, "Value", 150);
109 		final Text labelTxt = createAddressTxt(parent, "", 120);
110 		final Combo catCmb = hasCat ? new Combo(parent, SWT.NONE) : null;
111 
112 		if (catCmb != null) {
113 			catCmb.setItems(peopleService.getContactService().getContactPossibleCategories(contactNode));
114 			catCmb.select(0);
115 		}
116 
117 		ConnectWorkbenchUtils.refreshFormText(editor, valueTxt, contactNode, PeopleNames.PEOPLE_CONTACT_VALUE, PeopleMsg.value.lead());
118 		ConnectWorkbenchUtils.refreshFormText(editor, labelTxt, contactNode, Property.JCR_DESCRIPTION, PeopleMsg.description.lead());
119 		if (catCmb != null) {
120 			String currValue = ConnectJcrUtils.get(contactNode, Property.JCR_TITLE);
121 			if (EclipseUiUtils.notEmpty(currValue))
122 				catCmb.setText(currValue);
123 		}
124 
125 		// Listeners
126 		ConnectWorkbenchUtils.addTxtModifyListener(formPart, valueTxt, contactNode, PeopleNames.PEOPLE_CONTACT_VALUE,
127 				PropertyType.STRING);
128 		ConnectWorkbenchUtils.addTxtModifyListener(formPart, labelTxt, contactNode, Property.JCR_DESCRIPTION,
129 				PropertyType.STRING);
130 		if (catCmb != null)
131 			ConnectWorkbenchUtils.addTxtModifyListener(formPart, catCmb, contactNode, Property.JCR_TITLE,
132 					PropertyType.STRING);
133 	}
134 
135 	protected Text createAddressTxt(Composite parent, String msg, int width) {
136 		Text text = toolkit.createText(parent, null, SWT.BORDER);
137 		text.setMessage(msg);
138 		text.setLayoutData(width == 0 ? new RowData() : new RowData(width, SWT.DEFAULT));
139 		return text;
140 	}
141 
142 	@Override
143 	public boolean setFocus() {
144 		return true;
145 	}
146 }