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
32
33
34
35
36
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
71 Composite parent = this;
72 parent.setLayout(ConnectUiUtils.noSpaceGridLayout(2));
73
74
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)
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
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
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 }