1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.primefaces.extensions.component.orgchart;
23
24 import java.util.Arrays;
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.Map;
28
29 import javax.faces.application.ResourceDependency;
30 import javax.faces.component.UIData;
31 import javax.faces.component.behavior.ClientBehaviorHolder;
32 import javax.faces.context.FacesContext;
33 import javax.faces.event.AjaxBehaviorEvent;
34 import javax.faces.event.FacesEvent;
35
36 import org.primefaces.component.api.Widget;
37 import org.primefaces.extensions.event.OrgChartClickEvent;
38 import org.primefaces.extensions.event.OrgChartDropEvent;
39 import org.primefaces.util.Constants;
40
41
42
43
44
45
46
47
48 @ResourceDependency(library = "primefaces", name = "jquery/jquery.js")
49 @ResourceDependency(library = "primefaces", name = "jquery/jquery-plugins.js")
50 @ResourceDependency(library = "primefaces", name = "core.js")
51 @ResourceDependency(library = "primefaces-extensions", name = "primefaces-extensions.js")
52 @ResourceDependency(library = "primefaces-extensions", name = "orgchart/orgchart.js")
53 @ResourceDependency(library = "primefaces-extensions", name = "orgchart/orgchart.css")
54 public class OrgChart extends UIData implements Widget, ClientBehaviorHolder {
55
56 public static final String STYLE_CLASS = "ui-orgchart ";
57
58 public static final String COMPONENT_TYPE = "org.primefaces.extensions.component.OrgChart";
59 public static final String COMPONENT_FAMILY = "org.primefaces.extensions.component";
60 private static final String DEFAULT_RENDERER = "org.primefaces.extensions.component.orgchart.OrgChartRenderer";
61
62 private static final Collection<String> EVENT_NAMES = Collections
63 .unmodifiableCollection(Arrays.asList(OrgChartClickEvent.NAME, OrgChartDropEvent.NAME));
64
65 @SuppressWarnings("java:S115")
66 protected enum PropertyKeys {
67 nodeId,
68 widgetVar,
69 nodeContent,
70 direction,
71 pan,
72 toggleSiblingsResp,
73 depth,
74 exportButton,
75 exportFilename,
76 exportFileextension,
77 parentNodeSymbol,
78 draggable,
79 chartClass,
80 zoom,
81 zoominLimit,
82 zoomoutLimit,
83 verticalDepth,
84 nodeTitle,
85 style,
86 styleClass,
87 extender
88 }
89
90 public OrgChart() {
91 setRendererType(DEFAULT_RENDERER);
92 }
93
94 @Override
95 public String getFamily() {
96 return COMPONENT_FAMILY;
97 }
98
99 @Override
100 public Collection<String> getEventNames() {
101 return EVENT_NAMES;
102 }
103
104 @Override
105 public String getDefaultEventName() {
106 return OrgChartClickEvent.NAME;
107 }
108
109 @Override
110 public void processDecodes(final FacesContext fc) {
111 if (isSelfRequest(fc)) {
112 decode(fc);
113 }
114 else {
115 super.processDecodes(fc);
116 }
117 }
118
119 @Override
120 public void queueEvent(final FacesEvent event) {
121 final FacesContext fc = FacesContext.getCurrentInstance();
122
123 if (isSelfRequest(fc) && event instanceof AjaxBehaviorEvent) {
124 final Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
125 final String eventName = params.get(Constants.RequestParams.PARTIAL_BEHAVIOR_EVENT_PARAM);
126 final AjaxBehaviorEvent behaviorEvent = (AjaxBehaviorEvent) event;
127 final String clientId = getClientId(fc);
128
129 if (OrgChartClickEvent.NAME.equals(eventName)) {
130
131 final String id = params.get(clientId + "_nodeId");
132
133 final String hierarchyStr = params.get(clientId + "_hierarchy");
134
135 final OrgChartClickEvent orgChartClickEvent = new OrgChartClickEvent(this,
136 behaviorEvent.getBehavior(), id, hierarchyStr);
137 orgChartClickEvent.setPhaseId(event.getPhaseId());
138 super.queueEvent(orgChartClickEvent);
139 }
140 else if (OrgChartDropEvent.NAME.equals(eventName)) {
141 final String hierarchyStr = params.get(clientId + "_hierarchy");
142
143 final String draggedNodeId = params.get(clientId + "_draggedNodeId");
144
145 final String droppedZoneId = params.get(clientId + "_droppedZoneId");
146
147 final OrgChartDropEvent orgChartDropEvent = new OrgChartDropEvent(this,
148 behaviorEvent.getBehavior(), hierarchyStr, draggedNodeId, droppedZoneId);
149 orgChartDropEvent.setPhaseId(event.getPhaseId());
150 super.queueEvent(orgChartDropEvent);
151 }
152 }
153 }
154
155 private boolean isSelfRequest(final FacesContext context) {
156 return getClientId(context)
157 .equals(context.getExternalContext().getRequestParameterMap().get(
158 Constants.RequestParams.PARTIAL_SOURCE_PARAM));
159 }
160
161 public String getNodeId() {
162 return (String) getStateHelper().eval(PropertyKeys.nodeId, "id");
163 }
164
165 public void setNodeId(final String nodeId) {
166 getStateHelper().put(PropertyKeys.nodeId, nodeId);
167 }
168
169 public String getWidgetVar() {
170 return (String) getStateHelper().eval(PropertyKeys.widgetVar, null);
171 }
172
173 public void setWidgetVar(final String widgetVar) {
174 getStateHelper().put(PropertyKeys.widgetVar, widgetVar);
175 }
176
177 public String getNodeContent() {
178 return (String) getStateHelper().eval(PropertyKeys.nodeContent, "title");
179 }
180
181 public void setNodeContent(final String nodeContent) {
182 getStateHelper().put(PropertyKeys.nodeContent, nodeContent);
183 }
184
185 public String getDirection() {
186 return (String) getStateHelper().eval(PropertyKeys.direction, "t2b");
187 }
188
189 public void setDirection(final String direction) {
190 getStateHelper().put(PropertyKeys.direction, direction);
191 }
192
193 public Boolean getPan() {
194 return (Boolean) getStateHelper().eval(PropertyKeys.pan, false);
195 }
196
197 public void setPan(final Boolean pan) {
198 getStateHelper().put(PropertyKeys.pan, pan);
199 }
200
201 public Boolean getToggleSiblingsResp() {
202 return (Boolean) getStateHelper().eval(PropertyKeys.toggleSiblingsResp, false);
203 }
204
205 public void setToggleSiblingsResp(final Boolean toggleSiblingsResp) {
206 getStateHelper().put(PropertyKeys.toggleSiblingsResp, toggleSiblingsResp);
207 }
208
209 public Integer getDepth() {
210 return (Integer) getStateHelper().eval(PropertyKeys.depth, 999);
211 }
212
213 public void setDepth(final Integer depth) {
214 getStateHelper().put(PropertyKeys.depth, depth);
215 }
216
217 public Boolean getExportButton() {
218 return (Boolean) getStateHelper().eval(PropertyKeys.exportButton, false);
219 }
220
221 public void setExportButton(final Boolean exportButton) {
222 getStateHelper().put(PropertyKeys.exportButton, exportButton);
223 }
224
225 public String getExportFilename() {
226 return (String) getStateHelper().eval(PropertyKeys.exportFilename, "OrgChart");
227 }
228
229 public void setExportFilename(final String exportFilename) {
230 getStateHelper().put(PropertyKeys.exportFilename, exportFilename);
231 }
232
233 public String getExportFileextension() {
234 return (String) getStateHelper().eval(PropertyKeys.exportFileextension, "png");
235 }
236
237 public void setExportFileextension(final String exportFileextension) {
238 getStateHelper().put(PropertyKeys.exportFileextension, exportFileextension);
239 }
240
241 public String getParentNodeSymbol() {
242 return (String) getStateHelper().eval(PropertyKeys.parentNodeSymbol, "fa-users");
243 }
244
245 public void setParentNodeSymbol(final String parentNodeSymbol) {
246 getStateHelper().put(PropertyKeys.parentNodeSymbol, parentNodeSymbol);
247 }
248
249 public Boolean getDraggable() {
250 return (Boolean) getStateHelper().eval(PropertyKeys.draggable, false);
251 }
252
253 public void setDraggable(final Boolean draggable) {
254 getStateHelper().put(PropertyKeys.draggable, draggable);
255 }
256
257 public String getChartClass() {
258 return (String) getStateHelper().eval(PropertyKeys.chartClass, "");
259 }
260
261 public void setChartClass(final String chartClass) {
262 getStateHelper().put(PropertyKeys.chartClass, chartClass);
263 }
264
265 public Boolean getZoom() {
266 return (Boolean) getStateHelper().eval(PropertyKeys.zoom, false);
267 }
268
269 public void setZoom(final Boolean zoom) {
270 getStateHelper().put(PropertyKeys.zoom, zoom);
271 }
272
273 public Number getZoominLimit() {
274 return (Number) getStateHelper().eval(PropertyKeys.zoominLimit, 7);
275 }
276
277 public void setZoominLimit(final Number zoominLimit) {
278 getStateHelper().put(PropertyKeys.zoominLimit, zoominLimit);
279 }
280
281 public Number getZoomoutLimit() {
282 return (Number) getStateHelper().eval(PropertyKeys.zoomoutLimit, 0.5);
283 }
284
285 public void setZoomoutLimit(final Number zoomoutLimit) {
286 getStateHelper().put(PropertyKeys.zoomoutLimit, zoomoutLimit);
287 }
288
289 public Integer getVerticalDepth() {
290 return (Integer) getStateHelper().eval(PropertyKeys.verticalDepth, null);
291 }
292
293 public void setVerticalDepth(final Integer verticalDepth) {
294 getStateHelper().put(PropertyKeys.verticalDepth, verticalDepth);
295 }
296
297 public String getNodeTitle() {
298 return (String) getStateHelper().eval(PropertyKeys.nodeTitle, "name");
299 }
300
301 public void setNodeTitle(final String nodeTitle) {
302 getStateHelper().put(PropertyKeys.nodeTitle, nodeTitle);
303 }
304
305 public String getStyle() {
306 return (String) getStateHelper().eval(PropertyKeys.style, null);
307 }
308
309 public void setStyle(final String style) {
310 getStateHelper().put(PropertyKeys.style, style);
311 }
312
313 public String getStyleClass() {
314 return (String) getStateHelper().eval(PropertyKeys.styleClass, null);
315 }
316
317 public void setStyleClass(final String styleClass) {
318 getStateHelper().put(PropertyKeys.styleClass, styleClass);
319 }
320
321 public String getExtender() {
322 return (String) getStateHelper().eval(PropertyKeys.extender, null);
323 }
324
325 public void setExtender(final String extender) {
326 getStateHelper().put(PropertyKeys.extender, extender);
327 }
328
329 }