1 package org.argeo.people.ui.composites;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5
6 import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
7 import org.argeo.cms.util.CmsUtils;
8 import org.argeo.connect.resources.ResourcesService;
9 import org.argeo.connect.ui.ConnectEditor;
10 import org.argeo.connect.ui.ConnectImages;
11 import org.argeo.connect.ui.ConnectUiStyles;
12 import org.argeo.connect.ui.ConnectUiUtils;
13 import org.argeo.connect.ui.SystemWorkbenchService;
14 import org.argeo.people.PeopleException;
15 import org.argeo.people.PeopleNames;
16 import org.argeo.people.PeopleService;
17 import org.argeo.people.util.PeopleJcrUtils;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.events.SelectionAdapter;
20 import org.eclipse.swt.events.SelectionEvent;
21 import org.eclipse.swt.layout.GridData;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Button;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Label;
26
27
28
29 public class ContactButtonsComposite extends Composite {
30 private static final long serialVersionUID = 2331713954300845292L;
31
32
33 private final ResourcesService resourcesService;
34 private final PeopleService peopleService;
35 private final SystemWorkbenchService systemWorkbenchService;
36 private final Node contactNode;
37 private final boolean isEditing;
38 private final Node parentVersionableNode;
39 private final AbstractFormPart formPart;
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public ContactButtonsComposite(ConnectEditor editor, AbstractFormPart formPart, Composite parent, int style,
54 Node contactNode, Node parentVersionableNode, ResourcesService resourcesService,
55 PeopleService peopleService, SystemWorkbenchService systemWorkbenchService) {
56 super(parent, style);
57 this.resourcesService = resourcesService;
58 this.peopleService = peopleService;
59 this.systemWorkbenchService = systemWorkbenchService;
60 this.contactNode = contactNode;
61 this.parentVersionableNode = parentVersionableNode;
62 this.formPart = formPart;
63 this.isEditing = editor.isEditing();
64 populate();
65 }
66
67 private void populate() {
68
69 Composite buttCmp = this;
70 GridLayout gl = ConnectUiUtils.noSpaceGridLayout(isEditing ? 3 : 2);
71 buttCmp.setLayout(gl);
72
73
74 createCategoryButton(buttCmp);
75
76
77 Button primaryBtn = createPrimaryButton(buttCmp);
78 if (primaryBtn != null)
79 configurePrimaryButton(primaryBtn);
80
81
82 if (isEditing) {
83 Button deleteBtn = createDeleteButton(buttCmp);
84 configureDeleteButton(deleteBtn);
85 }
86 }
87
88 private void createCategoryButton(Composite parent) {
89 Label btn = new Label(parent, SWT.NONE);
90
91
92 btn.setImage(systemWorkbenchService.getIconForType(contactNode));
93 GridData gd = new GridData();
94
95
96 btn.setLayoutData(gd);
97
98 }
99
100 private Button createDeleteButton(Composite parent) {
101 Button btn = new Button(parent, SWT.FLAT | SWT.CENTER);
102 CmsUtils.style(btn, ConnectUiStyles.FLAT_BTN);
103 btn.setImage(ConnectImages.DELETE);
104 GridData gd = new GridData();
105 gd.widthHint = 20;
106 gd.heightHint = 16;
107 btn.setLayoutData(gd);
108 return btn;
109 }
110
111 private Button createPrimaryButton(Composite parent) {
112 try {
113
114 boolean isPrimary = (contactNode.hasProperty(PeopleNames.PEOPLE_IS_PRIMARY)
115 && contactNode.getProperty(PeopleNames.PEOPLE_IS_PRIMARY).getBoolean());
116 if (isEditing) {
117 Button btn = new Button(parent, SWT.FLAT | SWT.CENTER);
118
119
120 btn.setImage(isPrimary ? ConnectImages.PRIMARY : ConnectImages.PRIMARY_NOT);
121
122 GridData gd = new GridData();
123 gd.widthHint = 20;
124 gd.heightHint = 16;
125 btn.setLayoutData(gd);
126 return btn;
127 } else {
128 Label lbl = new Label(parent, SWT.NONE);
129 lbl.setImage(isPrimary ? ConnectImages.PRIMARY : ConnectImages.PRIMARY_NOT);
130 return null;
131 }
132
133 } catch (RepositoryException re) {
134 throw new PeopleException("Unable to create primary button for node " + contactNode, re);
135 }
136 }
137
138 private void configureDeleteButton(final Button btn) {
139 btn.addSelectionListener(new SelectionAdapter() {
140 private static final long serialVersionUID = 1L;
141
142 @Override
143 public void widgetSelected(final SelectionEvent event) {
144 try {
145
146 if (PeopleJcrUtils.isPrimary(parentVersionableNode, contactNode))
147 PeopleJcrUtils.updatePrimaryCache(resourcesService, peopleService, parentVersionableNode,
148 contactNode, false);
149
150 contactNode.remove();
151 formPart.markDirty();
152 formPart.refresh();
153 } catch (RepositoryException e) {
154 throw new PeopleException("unable to initialise deletion", e);
155 }
156 }
157 });
158 }
159
160 private void configurePrimaryButton(final Button btn) {
161 btn.addSelectionListener(new SelectionAdapter() {
162 private static final long serialVersionUID = 1L;
163
164 @Override
165 public void widgetSelected(final SelectionEvent event) {
166 boolean hasChanged = PeopleJcrUtils.markAsPrimary(resourcesService, peopleService,
167 parentVersionableNode, contactNode);
168
169 if (hasChanged) {
170 formPart.markDirty();
171 formPart.refresh();
172 }
173 }
174 });
175 }
176
177 @Override
178 public boolean setFocus() {
179 return true;
180 }
181 }