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.imageareaselect;
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.UIComponentBase;
31 import javax.faces.component.behavior.ClientBehaviorHolder;
32 import javax.faces.context.FacesContext;
33 import javax.faces.event.BehaviorEvent;
34 import javax.faces.event.FacesEvent;
35
36 import org.primefaces.component.api.Widget;
37 import org.primefaces.extensions.event.ImageAreaSelectEvent;
38 import org.primefaces.util.Constants;
39
40
41
42
43
44
45
46
47 @ResourceDependency(library = "primefaces", name = "jquery/jquery.js")
48 @ResourceDependency(library = "primefaces", name = "jquery/jquery-plugins.js")
49 @ResourceDependency(library = "primefaces", name = "core.js")
50 @ResourceDependency(library = "primefaces-extensions", name = "primefaces-extensions.js")
51 @ResourceDependency(library = "primefaces-extensions", name = "imageareaselect/imageareaselect.css")
52 @ResourceDependency(library = "primefaces-extensions", name = "imageareaselect/imageareaselect.js")
53 public class ImageAreaSelect extends UIComponentBase implements Widget, ClientBehaviorHolder {
54
55 public static final String COMPONENT_TYPE = "org.primefaces.extensions.component.ImageAreaSelect";
56 public static final String COMPONENT_FAMILY = "org.primefaces.extensions.component";
57 public static final String EVENT_SELECT_END = "selectEnd";
58 public static final String EVENT_SELECT_START = "selectStart";
59 public static final String EVENT_SELECT_CHANGE = "selectChange";
60 private static final String DEFAULT_RENDERER = "org.primefaces.extensions.component.ImageAreaSelectRenderer";
61
62 private static final Collection<String> EVENT_NAMES = Collections
63 .unmodifiableCollection(Arrays.asList(EVENT_SELECT_END, EVENT_SELECT_START, EVENT_SELECT_CHANGE));
64
65
66
67
68
69
70
71 @SuppressWarnings("java:S115")
72 protected enum PropertyKeys {
73
74
75 widgetVar,
76 forValue("for"),
77 aspectRatio,
78 autoHide,
79 fadeSpeed,
80 handles,
81 hide,
82 imageHeight,
83 imageWidth,
84 movable,
85 persistent,
86 resizable,
87 show,
88 zIndex,
89 maxHeight,
90 maxWidth,
91 minHeight,
92 minWidth,
93 parentSelector,
94 keyboardSupport;
95
96
97 private final String toString;
98
99 PropertyKeys(String toString) {
100 this.toString = toString;
101 }
102
103 PropertyKeys() {
104 toString = null;
105 }
106
107 @Override
108 public String toString() {
109 return ((toString != null) ? toString : super.toString());
110 }
111 }
112
113 public ImageAreaSelect() {
114 setRendererType(DEFAULT_RENDERER);
115 }
116
117 @Override
118 public String getFamily() {
119 return COMPONENT_FAMILY;
120 }
121
122 @Override
123 public Collection<String> getEventNames() {
124 return EVENT_NAMES;
125 }
126
127 @Override
128 public String getDefaultEventName() {
129 return EVENT_SELECT_END;
130 }
131
132 public String getAspectRatio() {
133 return (String) getStateHelper().eval(PropertyKeys.aspectRatio, null);
134 }
135
136 public void setAspectRatio(final String aspectRatio) {
137 getStateHelper().put(PropertyKeys.aspectRatio, aspectRatio);
138 }
139
140 public String getParentSelector() {
141 return (String) getStateHelper().eval(PropertyKeys.parentSelector, null);
142 }
143
144 public void setParentSelector(final String parentSelector) {
145 getStateHelper().put(PropertyKeys.parentSelector, parentSelector);
146 }
147
148 public Boolean isAutoHide() {
149 return (Boolean) getStateHelper().eval(PropertyKeys.autoHide, null);
150 }
151
152 public void setAutoHide(final Boolean autoHide) {
153 getStateHelper().put(PropertyKeys.autoHide, autoHide);
154 }
155
156 public Integer getFadeSpeed() {
157 return (Integer) getStateHelper().eval(PropertyKeys.fadeSpeed, null);
158 }
159
160 public void setFadeSpeed(final Integer fadeSpeed) {
161 getStateHelper().put(PropertyKeys.fadeSpeed, fadeSpeed);
162 }
163
164 public Boolean isHandles() {
165 return (Boolean) getStateHelper().eval(PropertyKeys.handles, null);
166 }
167
168 public void setHandles(final Boolean handles) {
169 getStateHelper().put(PropertyKeys.handles, handles);
170 }
171
172 public Boolean isHide() {
173 return (Boolean) getStateHelper().eval(PropertyKeys.hide, null);
174 }
175
176 public void setHide(final Boolean hide) {
177 getStateHelper().put(PropertyKeys.hide, hide);
178 }
179
180 public Integer getImageHeight() {
181 return (Integer) getStateHelper().eval(PropertyKeys.imageHeight, null);
182 }
183
184 public void setImageHeight(final Integer imageHeight) {
185 getStateHelper().put(PropertyKeys.imageHeight, imageHeight);
186 }
187
188 public Integer getImageWidth() {
189 return (Integer) getStateHelper().eval(PropertyKeys.imageWidth, null);
190 }
191
192 public void setImageWidth(final Integer imageWidth) {
193 getStateHelper().put(PropertyKeys.imageWidth, imageWidth);
194 }
195
196 public Boolean isMovable() {
197 return (Boolean) getStateHelper().eval(PropertyKeys.movable, null);
198 }
199
200 public void setMovable(final Boolean movable) {
201 getStateHelper().put(PropertyKeys.movable, movable);
202 }
203
204 public Boolean isKeyboardSupport() {
205 return (Boolean) getStateHelper().eval(PropertyKeys.keyboardSupport, null);
206 }
207
208 public void setKeyboardSupport(final Boolean keyboardSupport) {
209 getStateHelper().put(PropertyKeys.keyboardSupport, keyboardSupport);
210 }
211
212 public Boolean isPersistent() {
213 return (Boolean) getStateHelper().eval(PropertyKeys.persistent, null);
214 }
215
216 public void setPersistent(final Boolean persistent) {
217 getStateHelper().put(PropertyKeys.persistent, persistent);
218 }
219
220 public Boolean isResizable() {
221 return (Boolean) getStateHelper().eval(PropertyKeys.resizable, null);
222 }
223
224 public void setResizable(final Boolean resizable) {
225 getStateHelper().put(PropertyKeys.resizable, resizable);
226 }
227
228 public Boolean isShow() {
229 return (Boolean) getStateHelper().eval(PropertyKeys.show, null);
230 }
231
232 public void setShow(final Boolean show) {
233 getStateHelper().put(PropertyKeys.show, show);
234 }
235
236 public Integer getZIndex() {
237 return (Integer) getStateHelper().eval(PropertyKeys.zIndex, null);
238 }
239
240 public void setZIndex(final Integer zIndex) {
241 getStateHelper().put(PropertyKeys.zIndex, zIndex);
242 }
243
244 public Integer getMaxHeight() {
245 return (Integer) getStateHelper().eval(PropertyKeys.maxHeight, null);
246 }
247
248 public void setMaxHeight(final Integer maxHeight) {
249 getStateHelper().put(PropertyKeys.maxHeight, maxHeight);
250 }
251
252 public Integer getMaxWidth() {
253 return (Integer) getStateHelper().eval(PropertyKeys.maxWidth, null);
254 }
255
256 public void setMaxWidth(final Integer maxWidth) {
257 getStateHelper().put(PropertyKeys.maxWidth, maxWidth);
258 }
259
260 public Integer getMinHeight() {
261 return (Integer) getStateHelper().eval(PropertyKeys.minHeight, null);
262 }
263
264 public void setMinHeight(final Integer minHeight) {
265 getStateHelper().put(PropertyKeys.minHeight, minHeight);
266 }
267
268 public Integer getMinWidth() {
269 return (Integer) getStateHelper().eval(PropertyKeys.minWidth, null);
270 }
271
272 public void setMinWidth(final Integer minWidth) {
273 getStateHelper().put(PropertyKeys.minWidth, minWidth);
274 }
275
276 public String getWidgetVar() {
277 return (String) getStateHelper().eval(PropertyKeys.widgetVar, null);
278 }
279
280 public void setWidgetVar(final String widgetVar) {
281 getStateHelper().put(PropertyKeys.widgetVar, widgetVar);
282 }
283
284 public String getFor() {
285 return (String) getStateHelper().eval(PropertyKeys.forValue, null);
286 }
287
288 public void setFor(final String forValue) {
289 getStateHelper().put(PropertyKeys.forValue, forValue);
290 }
291
292 @Override
293 public void queueEvent(final FacesEvent event) {
294 final FacesContext context = FacesContext.getCurrentInstance();
295 final Map<String, String> params = context.getExternalContext().getRequestParameterMap();
296 final String clientId = getClientId(context);
297
298 if (isRequestSource(clientId, params)) {
299 final String eventName = params.get(Constants.RequestParams.PARTIAL_BEHAVIOR_EVENT_PARAM);
300
301 if (eventName.equals(EVENT_SELECT_END)
302 || eventName.equals(EVENT_SELECT_CHANGE)
303 || eventName.equals(EVENT_SELECT_START)) {
304
305 final BehaviorEvent behaviorEvent = (BehaviorEvent) event;
306
307 final int x1 = Integer.parseInt(params.get(clientId + "_x1"));
308 final int x2 = Integer.parseInt(params.get(clientId + "_x2"));
309 final int y1 = Integer.parseInt(params.get(clientId + "_y1"));
310 final int y2 = Integer.parseInt(params.get(clientId + "_y2"));
311 final int height = Integer.parseInt(params.get(clientId + "_height"));
312 final int width = Integer.parseInt(params.get(clientId + "_width"));
313 final int imgHeight = Integer.parseInt(params.get(clientId + "_imgHeight"));
314 final int imgWidth = Integer.parseInt(params.get(clientId + "_imgWidth"));
315 final String imgSrc = params.get(clientId + "_imgSrc");
316
317 final ImageAreaSelectEvent selectEvent = new ImageAreaSelectEvent(this, behaviorEvent.getBehavior(), height, width, x1, x2, y1, y2, imgHeight,
318 imgWidth, imgSrc);
319
320 super.queueEvent(selectEvent);
321 }
322 }
323 else {
324 super.queueEvent(event);
325 }
326 }
327
328 private static boolean isRequestSource(final String clientId, final Map<String, String> params) {
329 return clientId.equals(params.get(Constants.RequestParams.PARTIAL_SOURCE_PARAM));
330 }
331 }