001: /*
002: *
003: * Copyright 2007 Luca Molino (luca.molino@assetdata.it)
004: *
005: * Licensed under the Apache License, Version 2.0 (the "License");
006: * you may not use this file except in compliance with the License.
007: * You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.romaframework.module.users.view.domain.portal;
018:
019: import java.util.ArrayList;
020: import java.util.HashMap;
021: import java.util.List;
022: import java.util.Map;
023: import java.util.Set;
024:
025: import org.romaframework.aspect.core.annotation.AnnotationConstants;
026: import org.romaframework.aspect.i18n.I18NAspect;
027: import org.romaframework.aspect.persistence.PersistenceAspect;
028: import org.romaframework.aspect.view.ViewAspect;
029: import org.romaframework.aspect.view.ViewCallback;
030: import org.romaframework.aspect.view.ViewConstants;
031: import org.romaframework.aspect.view.annotation.ViewClass;
032: import org.romaframework.aspect.view.annotation.ViewField;
033: import org.romaframework.aspect.view.feature.ViewElementFeatures;
034: import org.romaframework.aspect.view.page.CallerHandler;
035: import org.romaframework.core.domain.message.MessageOk;
036: import org.romaframework.core.entity.ComposedEntityInstance;
037: import org.romaframework.core.flow.ObjectContext;
038: import org.romaframework.core.schema.SchemaClassResolver;
039: import org.romaframework.module.portal.PortalPage;
040: import org.romaframework.module.portal.PortalPageContainer;
041: import org.romaframework.module.users.domain.portal.PortalPreferences;
042: import org.romaframework.module.users.domain.portal.PortletList;
043:
044: /**
045: * Class that rapresents the portlet configuration page
046: *
047: * @author l.molino
048: *
049: */
050: @ViewClass(entity=PortalPreferences.class)
051: public class PortletPreferencesConfiguration extends
052: ComposedEntityInstance<PortalPreferences> implements
053: CallerHandler, ViewCallback {
054:
055: @ViewField(visible=AnnotationConstants.FALSE)
056: protected Object backObject;
057:
058: @ViewField(visible=AnnotationConstants.FALSE)
059: protected String containerSelected;
060:
061: @ViewField(visible=AnnotationConstants.FALSE)
062: protected String selectedPortletSelected;
063:
064: @ViewField(visible=AnnotationConstants.FALSE)
065: protected String availablePortletSelected;
066:
067: @ViewField(render=ViewConstants.RENDER_LIST,selectionField="containerSelected",enabled=AnnotationConstants.FALSE)
068: protected List<String> containers;
069:
070: @ViewField(render=ViewConstants.RENDER_LIST,selectionField="availablePortletSelected",enabled=AnnotationConstants.FALSE)
071: protected List<String> availablePortlets;
072:
073: @ViewField(render=ViewConstants.RENDER_LIST,selectionField="selectedPortletSelected",enabled=AnnotationConstants.FALSE)
074: protected List<String> selectedPortlets;
075:
076: @ViewField(visible=AnnotationConstants.FALSE)
077: protected Map<String, String> classNamesMapper;
078:
079: public PortletPreferencesConfiguration(PortalPreferences iEntity) {
080: super (iEntity);
081: availablePortlets = new ArrayList<String>();
082: selectedPortlets = new ArrayList<String>();
083: containers = new ArrayList<String>();
084: classNamesMapper = new HashMap<String, String>();
085: }
086:
087: public Object getBackObject() {
088: return backObject;
089: }
090:
091: public void setBackObject(Object iBackObject) {
092: backObject = iBackObject;
093: }
094:
095: public List<String> getContainers() {
096: return containers;
097: }
098:
099: public String getContainerSelected() {
100: return containerSelected;
101: }
102:
103: public List<String> getAvailablePortlets() {
104: return availablePortlets;
105: }
106:
107: public String getSelectedPortletSelected() {
108: return selectedPortletSelected;
109: }
110:
111: public void setContainerSelected(String iContainerSelected) {
112: if (containerSelected != null
113: && containerSelected.equals(iContainerSelected))
114: return;
115: if (iContainerSelected == null || iContainerSelected.equals("")) {
116: ObjectContext.getInstance().setFieldFeature(this ,
117: ViewAspect.ASPECT_NAME, "availablePortlets",
118: ViewElementFeatures.VISIBLE, Boolean.FALSE);
119: ObjectContext.getInstance().setFieldFeature(this ,
120: ViewAspect.ASPECT_NAME, "selectedPortlets",
121: ViewElementFeatures.VISIBLE, Boolean.FALSE);
122: }
123: this .containerSelected = iContainerSelected;
124: ObjectContext.getInstance().setFieldFeature(this ,
125: ViewAspect.ASPECT_NAME, "availablePortlets",
126: ViewElementFeatures.VISIBLE, Boolean.TRUE);
127: ObjectContext.getInstance().setFieldFeature(this ,
128: ViewAspect.ASPECT_NAME, "selectedPortlets",
129: ViewElementFeatures.VISIBLE, Boolean.TRUE);
130: ObjectContext.getInstance().setActionFeature(this ,
131: ViewAspect.ASPECT_NAME, "add",
132: ViewElementFeatures.VISIBLE, Boolean.TRUE);
133: ObjectContext.getInstance().setActionFeature(this ,
134: ViewAspect.ASPECT_NAME, "remove",
135: ViewElementFeatures.VISIBLE, Boolean.TRUE);
136: ObjectContext.getInstance().setActionFeature(this ,
137: ViewAspect.ASPECT_NAME, "addAll",
138: ViewElementFeatures.VISIBLE, Boolean.TRUE);
139: ObjectContext.getInstance().setActionFeature(this ,
140: ViewAspect.ASPECT_NAME, "removeAll",
141: ViewElementFeatures.VISIBLE, Boolean.TRUE);
142: availablePortlets.clear();
143: selectedPortlets.clear();
144: availablePortletSelected = null;
145: selectedPortletSelected = null;
146: List<Class<?>> portletSchemas = ObjectContext.getInstance()
147: .getComponent(SchemaClassResolver.class)
148: .getEntityClassByInheritance(PortalPage.class);
149: for (Class<?> schema : portletSchemas) {
150: String classLabel = ObjectContext.getInstance()
151: .getComponent(I18NAspect.class).getString(
152: schema.getSimpleName() + ".label");
153: if (classLabel == null || classLabel.equals(""))
154: classLabel = schema.getSimpleName();
155: classNamesMapper.put(classLabel, schema.getSimpleName());
156: if (entity.getPortletsInfos().get(
157: classNamesMapper.get(containerSelected)) != null) {
158: List<String> selected = entity.getPortletsInfos().get(
159: classNamesMapper.get(containerSelected))
160: .getPortlets();
161: if (selected.contains(schema.getSimpleName()))
162: selectedPortlets.add(classLabel);
163: else
164: availablePortlets.add(classLabel);
165: } else
166: availablePortlets.add(classLabel);
167: }
168: if (selectedPortlets.size() <= 0 || selectedPortlets.isEmpty()) {
169: ObjectContext.getInstance().setActionFeature(this ,
170: ViewAspect.ASPECT_NAME, "removeAll",
171: ViewElementFeatures.VISIBLE, Boolean.FALSE);
172: ObjectContext.getInstance().setActionFeature(this ,
173: ViewAspect.ASPECT_NAME, "addAll",
174: ViewElementFeatures.VISIBLE, Boolean.TRUE);
175: }
176: if (availablePortlets.size() <= 0
177: || availablePortlets.isEmpty()) {
178: ObjectContext.getInstance().setActionFeature(this ,
179: ViewAspect.ASPECT_NAME, "addAll",
180: ViewElementFeatures.VISIBLE, Boolean.FALSE);
181: ObjectContext.getInstance().setActionFeature(this ,
182: ViewAspect.ASPECT_NAME, "removeAll",
183: ViewElementFeatures.VISIBLE, Boolean.TRUE);
184: }
185: ObjectContext.getInstance().refresh(this , "availablePortlets");
186: ObjectContext.getInstance().refresh(this , "selectedPortlets");
187: }
188:
189: public void setSelectedPortletSelected(String portletSelected) {
190: if (portletSelected != null) {
191: this .selectedPortletSelected = portletSelected;
192: setAvailablePortletSelected(null);
193: ObjectContext.getInstance().setActionFeature(this ,
194: ViewAspect.ASPECT_NAME, "add",
195: ViewElementFeatures.VISIBLE, Boolean.FALSE);
196: ObjectContext.getInstance().setActionFeature(this ,
197: ViewAspect.ASPECT_NAME, "remove",
198: ViewElementFeatures.VISIBLE, Boolean.TRUE);
199: ObjectContext.getInstance().refresh(this ,
200: "availablePortlets");
201: }
202: }
203:
204: public String getAvailablePortletSelected() {
205: return availablePortletSelected;
206: }
207:
208: public void setAvailablePortletSelected(
209: String availablePortletSelected) {
210: if (availablePortletSelected != null) {
211: this .availablePortletSelected = availablePortletSelected;
212: setSelectedPortletSelected(null);
213: ObjectContext.getInstance().setActionFeature(this ,
214: ViewAspect.ASPECT_NAME, "add",
215: ViewElementFeatures.VISIBLE, Boolean.TRUE);
216: ObjectContext.getInstance().setActionFeature(this ,
217: ViewAspect.ASPECT_NAME, "remove",
218: ViewElementFeatures.VISIBLE, Boolean.FALSE);
219: ObjectContext.getInstance().refresh(this ,
220: "selectedPortlets");
221: }
222: }
223:
224: public void onDispose() {
225: }
226:
227: public void onShow() {
228: availablePortlets.clear();
229: containers.clear();
230: List<Class<?>> containerSchemas = ObjectContext.getInstance()
231: .getComponent(SchemaClassResolver.class)
232: .getEntityClassByInheritance(PortalPageContainer.class);
233: for (Class<?> schema : containerSchemas) {
234: String containerName = ObjectContext.getInstance()
235: .getComponent(I18NAspect.class).getString(
236: schema.getSimpleName() + ".label");
237: if (containerName == null || containerName.equals(""))
238: containerName = schema.getSimpleName();
239: classNamesMapper.put(containerName, schema.getSimpleName());
240: containers.add(containerName);
241: }
242: if (containerSelected == null || containerSelected.equals("")) {
243: ObjectContext.getInstance().setFieldFeature(this ,
244: ViewAspect.ASPECT_NAME, "availablePortlets",
245: ViewElementFeatures.VISIBLE, Boolean.FALSE);
246: ObjectContext.getInstance().setFieldFeature(this ,
247: ViewAspect.ASPECT_NAME, "selectedPortlets",
248: ViewElementFeatures.VISIBLE, Boolean.FALSE);
249: ObjectContext.getInstance().setActionFeature(this ,
250: ViewAspect.ASPECT_NAME, "add",
251: ViewElementFeatures.VISIBLE, Boolean.FALSE);
252: ObjectContext.getInstance().setActionFeature(this ,
253: ViewAspect.ASPECT_NAME, "remove",
254: ViewElementFeatures.VISIBLE, Boolean.FALSE);
255: ObjectContext.getInstance().setActionFeature(this ,
256: ViewAspect.ASPECT_NAME, "addAll",
257: ViewElementFeatures.VISIBLE, Boolean.FALSE);
258: ObjectContext.getInstance().setActionFeature(this ,
259: ViewAspect.ASPECT_NAME, "removeAll",
260: ViewElementFeatures.VISIBLE, Boolean.FALSE);
261: }
262: }
263:
264: public void addAll() {
265: List<String> availablePortlets = new ArrayList<String>();
266: availablePortlets.addAll(this .availablePortlets);
267: for (String availablePortlet : availablePortlets) {
268: availablePortletSelected = availablePortlet;
269: add();
270: }
271: }
272:
273: public void removeAll() {
274: List<String> selectedPortlets = new ArrayList<String>();
275: selectedPortlets.addAll(this .selectedPortlets);
276: for (String selectedPortlet : selectedPortlets) {
277: selectedPortletSelected = selectedPortlet;
278: remove();
279: }
280: }
281:
282: public void add() {
283: if (containerSelected != null) {
284: if (availablePortletSelected != null
285: && !availablePortletSelected.equals("")) {
286: if (!entity.getPortletsInfos().containsKey(
287: classNamesMapper.get(containerSelected))) {
288: List<String> portlets = new ArrayList<String>();
289: portlets.add(classNamesMapper
290: .get(selectedPortletSelected));
291: PortletList portletList = new PortletList();
292: portletList.setPortlets(portlets);
293: entity.getPortletsInfos().put(
294: classNamesMapper.get(containerSelected),
295: portletList);
296: } else {
297: if (!entity
298: .getPortletsInfos()
299: .get(
300: classNamesMapper
301: .get(containerSelected))
302: .getPortlets()
303: .contains(
304: classNamesMapper
305: .get(availablePortletSelected)))
306: entity
307: .getPortletsInfos()
308: .get(
309: classNamesMapper
310: .get(containerSelected))
311: .getPortlets()
312: .add(
313: classNamesMapper
314: .get(availablePortletSelected));
315: }
316: selectedPortlets.add(availablePortletSelected);
317: availablePortlets.remove(availablePortletSelected);
318: availablePortletSelected = null;
319: selectedPortletSelected = null;
320: if (availablePortlets.size() <= 0
321: || availablePortlets.isEmpty()) {
322: ObjectContext.getInstance().setActionFeature(this ,
323: ViewAspect.ASPECT_NAME, "add",
324: ViewElementFeatures.VISIBLE, Boolean.FALSE);
325: ObjectContext.getInstance().setActionFeature(this ,
326: ViewAspect.ASPECT_NAME, "addAll",
327: ViewElementFeatures.VISIBLE, Boolean.FALSE);
328: ObjectContext.getInstance().setActionFeature(this ,
329: ViewAspect.ASPECT_NAME, "removeAll",
330: ViewElementFeatures.VISIBLE, Boolean.TRUE);
331: }
332: ObjectContext.getInstance().refresh(this ,
333: "availablePortlets");
334: ObjectContext.getInstance().refresh(this ,
335: "selectedPortlets");
336: } else {
337: showNoPortletSelectedMessage();
338: }
339: } else {
340: showNoContainerSelectedMessage();
341: }
342: }
343:
344: public void remove() {
345: if (containerSelected != null) {
346: if (selectedPortletSelected != null
347: && !selectedPortletSelected.equals("")) {
348: while (entity.getPortletsInfos().get(
349: classNamesMapper.get(containerSelected))
350: .getPortlets().contains(
351: classNamesMapper
352: .get(selectedPortletSelected))) {
353: entity
354: .getPortletsInfos()
355: .get(
356: classNamesMapper
357: .get(containerSelected))
358: .getPortlets()
359: .remove(
360: classNamesMapper
361: .get(selectedPortletSelected));
362: }
363: selectedPortlets.remove(selectedPortletSelected);
364: availablePortlets.add(selectedPortletSelected);
365: availablePortletSelected = null;
366: selectedPortletSelected = null;
367: if (selectedPortlets.size() <= 0
368: || selectedPortlets.isEmpty()) {
369: ObjectContext.getInstance().setActionFeature(this ,
370: ViewAspect.ASPECT_NAME, "remove",
371: ViewElementFeatures.VISIBLE, Boolean.FALSE);
372: ObjectContext.getInstance().setActionFeature(this ,
373: ViewAspect.ASPECT_NAME, "removeAll",
374: ViewElementFeatures.VISIBLE, Boolean.FALSE);
375: ObjectContext.getInstance().setActionFeature(this ,
376: ViewAspect.ASPECT_NAME, "addAll",
377: ViewElementFeatures.VISIBLE, Boolean.TRUE);
378: }
379: ObjectContext.getInstance().refresh(this ,
380: "availablePortlets");
381: ObjectContext.getInstance().refresh(this ,
382: "selectedPortlets");
383: } else {
384: showNoPortletSelectedMessage();
385: }
386: } else {
387: showNoContainerSelectedMessage();
388: }
389: }
390:
391: public void save() {
392: PersistenceAspect db = ObjectContext.getInstance()
393: .getComponent("TxPersistenceAspect");
394: try {
395: Set<String> keys = entity.getPortletsInfos().keySet();
396: for (String string : keys) {
397: while (entity.getPortletsInfos().get(string)
398: .getPortlets() != null
399: && entity.getPortletsInfos().get(string)
400: .getPortlets().contains(null)) {
401: entity.getPortletsInfos().get(string).getPortlets()
402: .remove(null);
403: }
404: }
405: db.updateObject(entity);
406: db.commit();
407: } finally {
408: db.close();
409: }
410: back();
411: }
412:
413: public void cancel() {
414: back();
415: }
416:
417: protected void back() {
418: if (backObject != null)
419: ObjectContext.getInstance().show(backObject);
420: else
421: ObjectContext.getInstance().close(this );
422: }
423:
424: private void showNoContainerSelectedMessage() {
425: ObjectContext
426: .getInstance()
427: .show(
428: new MessageOk("trackingModifyError",
429: "Errore di selezione", null,
430: "$PortletPreferencesConfiguration.noContainerSelected.error"),
431: "screen:popup");
432: }
433:
434: private void showNoPortletSelectedMessage() {
435: ObjectContext
436: .getInstance()
437: .show(
438: new MessageOk("trackingModifyError",
439: "Errore di selezione", null,
440: "$PortletPreferencesConfiguration.noPortletSelected.error"),
441: "screen:popup");
442: }
443:
444: public List<String> getSelectedPortlets() {
445: return selectedPortlets;
446: }
447:
448: }
|