001: /******************************************************************************
002: * JBoss, a division of Red Hat *
003: * Copyright 2006, Red Hat Middleware, LLC, and individual *
004: * contributors as indicated by the @authors tag. See the *
005: * copyright.txt in the distribution for a full listing of *
006: * individual contributors. *
007: * *
008: * This is free software; you can redistribute it and/or modify it *
009: * under the terms of the GNU Lesser General Public License as *
010: * published by the Free Software Foundation; either version 2.1 of *
011: * the License, or (at your option) any later version. *
012: * *
013: * This software is distributed in the hope that it will be useful, *
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of *
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
016: * Lesser General Public License for more details. *
017: * *
018: * You should have received a copy of the GNU Lesser General Public *
019: * License along with this software; if not, write to the Free *
020: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
021: * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
022: ******************************************************************************/package org.jboss.portal.core.admin.ui;
023:
024: import org.jboss.portal.common.i18n.LocalizedString;
025: import org.jboss.portal.core.impl.model.portal.WindowImpl;
026: import org.jboss.portal.core.model.portal.PortalObject;
027: import org.jboss.portal.core.model.portal.control.ControlConstants;
028: import org.jboss.portal.theme.ThemeConstants;
029: import org.jboss.portal.theme.impl.render.dynamic.DynaRenderOptions;
030:
031: import java.util.HashMap;
032: import java.util.Iterator;
033: import java.util.Map;
034: import java.util.Set;
035:
036: /**
037: * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
038: * @author <a href="mailto:boleslaw dot dawidowicz at redhat dot com>Boleslaw Dawidowicz</a>
039: * @version $Revision: 8785 $
040: */
041: public class PropertiesInfo {
042:
043: //
044:
045: public static final PropertyInfo THEME_LAYOUT_ID = new PropertyInfo(
046: ThemeConstants.PORTAL_PROP_LAYOUT, new LocalizedString(
047: "Layout id"), new LocalizedString(
048: "The layout value formats a page"),
049: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
050: PropertyInfo.PRIVATE_SCOPE);
051: public static final PropertyInfo THEME_THEME_ID = new PropertyInfo(
052: ThemeConstants.PORTAL_PROP_THEME, new LocalizedString(
053: "Theme id"), new LocalizedString(
054: "The theme value skins a page"),
055: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
056: PropertyInfo.PRIVATE_SCOPE);
057: public static final PropertyInfo THEME_RENDER_SET_ID = new PropertyInfo(
058: ThemeConstants.PORTAL_PROP_RENDERSET, new LocalizedString(
059: "Renderset id"), new LocalizedString(
060: "The render set id"), "java.lang.String",
061: PropertyInfo.READ_WRITE_ACCESS_MODE,
062: PropertyInfo.PRIVATE_SCOPE);
063: public static final PropertyInfo THEME_RENDER_REGION_ID = new PropertyInfo(
064: ThemeConstants.PORTAL_PROP_REGION, new LocalizedString(
065: "Region id"), new LocalizedString(
066: "The region that will the window"),
067: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
068: PropertyInfo.PRIVATE_SCOPE);
069: public static final PropertyInfo THEME_RENDER_REGION_ORDER = new PropertyInfo(
070: ThemeConstants.PORTAL_PROP_ORDER,
071: new LocalizedString("Region order"),
072: new LocalizedString(
073: "The vertical or horizontal order of the window within a region"),
074: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
075: PropertyInfo.PUBLIC_SCOPE);
076:
077: //
078:
079: public static final PropertyInfo AJAX_PARTIAL_REFRESH = new PropertyInfo(
080: DynaRenderOptions.PARTIAL_REFRESH_ENABLED,
081: new LocalizedString("Partial refresh"),
082: new LocalizedString("Enable partial refresh for portlets"),
083: "java.lang.Boolean", PropertyInfo.READ_WRITE_ACCESS_MODE,
084: PropertyInfo.PUBLIC_SCOPE);
085: public static final PropertyInfo AJAX_DND = new PropertyInfo(
086: DynaRenderOptions.DND_ENABLED, new LocalizedString(
087: "Drag and drop"), new LocalizedString(
088: "Enable window drag and drop"),
089: "java.lang.Boolean", PropertyInfo.READ_WRITE_ACCESS_MODE,
090: PropertyInfo.PUBLIC_SCOPE);
091:
092: //
093:
094: public static final PropertyInfo WINDOW_CONTENT_TYPE = new PropertyInfo(
095: WindowImpl.PORTAL_PROP_WINDOW_CONTENT_TYPE,
096: new LocalizedString("Content type"), new LocalizedString(
097: "The type of content of a window"),
098: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
099: PropertyInfo.PRIVATE_SCOPE);
100: public static final PropertyInfo DEFAULT_CHILD_NAME = new PropertyInfo(
101: WindowImpl.PORTAL_PROP_DEFAULT_OBJECT_NAME,
102: new LocalizedString("Default child name"),
103: new LocalizedString(
104: "The child name used when no specific child name is explicited"),
105: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
106: PropertyInfo.PUBLIC_SCOPE);
107: public static final PropertyInfo PAGE_ORDER = new PropertyInfo(
108: "order", new LocalizedString("Tab order"),
109: new LocalizedString(
110: "The order value to display pages in tabs"),
111: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
112: PropertyInfo.PUBLIC_SCOPE);
113: public static final PropertyInfo INITIAL_WINDOW_STATE = new PropertyInfo(
114: WindowImpl.PORTAL_INITIAL_WINDOW_STATE,
115: new LocalizedString("Initial Mode"), new LocalizedString(
116: "The inital mode of the window"),
117: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
118: PropertyInfo.PUBLIC_SCOPE);
119:
120: //
121:
122: public static final PropertyInfo CONTROL_POLICY_PAGE_ACCESS_DENIED = new PropertyInfo(
123: ControlConstants.PAGE_ACCESS_DENIED_CONTROL_KEY,
124: new LocalizedString("When access to the window is denied"),
125: new LocalizedString("When access to the window is denied"),
126: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
127: PropertyInfo.PRIVATE_SCOPE);
128: public static final PropertyInfo CONTROL_POLICY_PAGE_UNAVAILABLE = new PropertyInfo(
129: ControlConstants.PAGE_UNAVAILABLE_CONTROL_KEY,
130: new LocalizedString("When the window is unavailable"),
131: new LocalizedString("When the window is unavailable"),
132: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
133: PropertyInfo.PRIVATE_SCOPE);
134: public static final PropertyInfo CONTROL_POLICY_PAGE_ERROR = new PropertyInfo(
135: ControlConstants.PAGE_ERROR_CONTROL_KEY,
136: new LocalizedString("When there is an error on the window"),
137: new LocalizedString("When there is an error on the window"),
138: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
139: PropertyInfo.PRIVATE_SCOPE);
140: public static final PropertyInfo CONTROL_POLICY_PAGE_INTERNAL_ERROR = new PropertyInfo(
141: ControlConstants.PAGE_INTERNAL_ERROR_CONTROL_KEY,
142: new LocalizedString(
143: "When there is an error within the window"),
144: new LocalizedString(
145: "When there is an error within the window"),
146: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
147: PropertyInfo.PRIVATE_SCOPE);
148: public static final PropertyInfo CONTROL_POLICY_PAGE_NOT_FOUND = new PropertyInfo(
149: ControlConstants.PAGE_NOT_FOUND_CONTROL_KEY,
150: new LocalizedString("When the window is not found"),
151: new LocalizedString("When the window is not found"),
152: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
153: PropertyInfo.PRIVATE_SCOPE);
154: public static final PropertyInfo CONTROL_POLICY_PAGE_RESOURCE_URI = new PropertyInfo(
155: ControlConstants.PAGE_RESOURCE_URI_CONTROL_KEY,
156: new LocalizedString("On error redirect to this resource"),
157: new LocalizedString("On error redirect to this resource"),
158: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
159: PropertyInfo.PRIVATE_SCOPE);
160:
161: //
162:
163: public static final PropertyInfo CONTROL_POLICY_PORTAL_ACCESS_DENIED = new PropertyInfo(
164: ControlConstants.PORTAL_ACCESS_DENIED_CONTROL_KEY,
165: new LocalizedString("When access to the page is denied"),
166: new LocalizedString("When access to the page is denied"),
167: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
168: PropertyInfo.PRIVATE_SCOPE);
169: public static final PropertyInfo CONTROL_POLICY_PORTAL_UNAVAILABLE = new PropertyInfo(
170: ControlConstants.PORTAL_UNAVAILABLE_CONTROL_KEY,
171: new LocalizedString("When the page is unavailable"),
172: new LocalizedString("When the page is unavailable"),
173: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
174: PropertyInfo.PRIVATE_SCOPE);
175: public static final PropertyInfo CONTROL_POLICY_PORTAL_ERROR = new PropertyInfo(
176: ControlConstants.PORTAL_ERROR_CONTROL_KEY,
177: new LocalizedString("When there is an error on the page"),
178: new LocalizedString("When there is an error on the page"),
179: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
180: PropertyInfo.PRIVATE_SCOPE);
181: public static final PropertyInfo CONTROL_POLICY_PORTAL_INTERNAL_ERROR = new PropertyInfo(
182: ControlConstants.PORTAL_INTERNAL_ERROR_CONTROL_KEY,
183: new LocalizedString(
184: "When there is an error within the page"),
185: new LocalizedString(
186: "When there is an error within the page"),
187: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
188: PropertyInfo.PRIVATE_SCOPE);
189: public static final PropertyInfo CONTROL_POLICY_PORTAL_NOT_FOUND = new PropertyInfo(
190: ControlConstants.PORTAL_NOT_FOUND_CONTROL_KEY,
191: new LocalizedString("When the page is not found"),
192: new LocalizedString("When the page is not found"),
193: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
194: PropertyInfo.PRIVATE_SCOPE);
195: public static final PropertyInfo CONTROL_POLICY_PORTAL_RESOURCE_URI = new PropertyInfo(
196: ControlConstants.PORTAL_RESOURCE_URI_CONTROL_KEY,
197: new LocalizedString("On error redirect to this resource"),
198: new LocalizedString("On error redirect to this resource"),
199: "java.lang.String", PropertyInfo.READ_WRITE_ACCESS_MODE,
200: PropertyInfo.PRIVATE_SCOPE);
201:
202: /** . */
203: private static final PropertyInfoSet CONTEXT_PROPERTIES = new PropertyInfoSet();
204:
205: /** . */
206: private static final PropertyInfoSet PORTAL_PROPERTIES = new PropertyInfoSet();
207:
208: /** . */
209: private static final PropertyInfoSet PAGE_PROPERTIES = new PropertyInfoSet();
210:
211: /** . */
212: private static final PropertyInfoSet WINDOW_PROPERTIES = new PropertyInfoSet();
213:
214: /** . */
215: private static final PropertyInfoSet CONTROL_PROPERTIES = new PropertyInfoSet();
216:
217: /** . */
218: private static final PropertyInfoSet CONTROL_PAGE_PROPERTIES = new PropertyInfoSet();
219:
220: /** . */
221: private static final PropertyInfoSet CONTROL_PORTAL_PROPERTIES = new PropertyInfoSet();
222:
223: /** . */
224: private static final PropertyInfoSet ALL_PROPERTIES = new PropertyInfoSet();
225:
226: /** Just avoid to write put(propertyInfo.getName(), propertyInfo). */
227: private static class PropertyInfoSet extends HashMap {
228: public void add(PropertyInfo propertyInfo) {
229: put(propertyInfo.getName(), propertyInfo);
230: }
231: }
232:
233: static {
234: CONTEXT_PROPERTIES.add(AJAX_PARTIAL_REFRESH);
235: CONTEXT_PROPERTIES.add(AJAX_DND);
236: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PORTAL_ACCESS_DENIED);
237: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PORTAL_UNAVAILABLE);
238: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PORTAL_ERROR);
239: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PORTAL_INTERNAL_ERROR);
240: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PORTAL_NOT_FOUND);
241: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PORTAL_RESOURCE_URI);
242: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PAGE_ACCESS_DENIED);
243: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PAGE_UNAVAILABLE);
244: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PAGE_ERROR);
245: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PAGE_INTERNAL_ERROR);
246: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PAGE_NOT_FOUND);
247: CONTEXT_PROPERTIES.add(CONTROL_POLICY_PAGE_RESOURCE_URI);
248:
249: //
250: PORTAL_PROPERTIES.add(THEME_LAYOUT_ID);
251: PORTAL_PROPERTIES.add(THEME_THEME_ID);
252: PORTAL_PROPERTIES.add(THEME_RENDER_SET_ID);
253: PORTAL_PROPERTIES.add(DEFAULT_CHILD_NAME);
254: PORTAL_PROPERTIES.add(AJAX_PARTIAL_REFRESH);
255: PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_ACCESS_DENIED);
256: PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_UNAVAILABLE);
257: PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_ERROR);
258: PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_INTERNAL_ERROR);
259: PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_NOT_FOUND);
260: PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_RESOURCE_URI);
261: PORTAL_PROPERTIES.add(CONTROL_POLICY_PAGE_ACCESS_DENIED);
262: PORTAL_PROPERTIES.add(CONTROL_POLICY_PAGE_UNAVAILABLE);
263: PORTAL_PROPERTIES.add(CONTROL_POLICY_PAGE_ERROR);
264: PORTAL_PROPERTIES.add(CONTROL_POLICY_PAGE_INTERNAL_ERROR);
265: PORTAL_PROPERTIES.add(CONTROL_POLICY_PAGE_NOT_FOUND);
266: PORTAL_PROPERTIES.add(CONTROL_POLICY_PAGE_RESOURCE_URI);
267:
268: //
269: PAGE_PROPERTIES.add(THEME_LAYOUT_ID);
270: PAGE_PROPERTIES.add(THEME_THEME_ID);
271: PAGE_PROPERTIES.add(THEME_RENDER_SET_ID);
272: PAGE_PROPERTIES.add(DEFAULT_CHILD_NAME);
273: PAGE_PROPERTIES.add(PAGE_ORDER);
274: PAGE_PROPERTIES.add(AJAX_PARTIAL_REFRESH);
275: PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_ACCESS_DENIED);
276: PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_UNAVAILABLE);
277: PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_ERROR);
278: PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_INTERNAL_ERROR);
279: PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_NOT_FOUND);
280: PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_RESOURCE_URI);
281: //
282: WINDOW_PROPERTIES.add(AJAX_PARTIAL_REFRESH);
283: WINDOW_PROPERTIES.add(THEME_RENDER_REGION_ID);
284: WINDOW_PROPERTIES.add(THEME_RENDER_REGION_ORDER);
285: WINDOW_PROPERTIES.add(WINDOW_CONTENT_TYPE);
286: WINDOW_PROPERTIES.add(INITIAL_WINDOW_STATE);
287:
288: //
289: CONTROL_PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_ACCESS_DENIED);
290: CONTROL_PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_ERROR);
291: CONTROL_PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_INTERNAL_ERROR);
292: CONTROL_PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_NOT_FOUND);
293: CONTROL_PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_UNAVAILABLE);
294: CONTROL_PAGE_PROPERTIES.add(CONTROL_POLICY_PAGE_RESOURCE_URI);
295:
296: //
297: CONTROL_PORTAL_PROPERTIES
298: .add(CONTROL_POLICY_PORTAL_ACCESS_DENIED);
299: CONTROL_PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_ERROR);
300: CONTROL_PORTAL_PROPERTIES
301: .add(CONTROL_POLICY_PORTAL_INTERNAL_ERROR);
302: CONTROL_PORTAL_PROPERTIES.add(CONTROL_POLICY_PORTAL_NOT_FOUND);
303: CONTROL_PORTAL_PROPERTIES
304: .add(CONTROL_POLICY_PORTAL_UNAVAILABLE);
305: CONTROL_PORTAL_PROPERTIES
306: .add(CONTROL_POLICY_PORTAL_RESOURCE_URI);
307:
308: //
309: CONTROL_PROPERTIES.putAll(CONTROL_PORTAL_PROPERTIES);
310: CONTROL_PROPERTIES.putAll(CONTROL_PAGE_PROPERTIES);
311:
312: //
313: ALL_PROPERTIES.putAll(CONTEXT_PROPERTIES);
314: ALL_PROPERTIES.putAll(PORTAL_PROPERTIES);
315: ALL_PROPERTIES.putAll(PAGE_PROPERTIES);
316: ALL_PROPERTIES.putAll(WINDOW_PROPERTIES);
317:
318: }
319:
320: /** . */
321: private Map entries;
322:
323: public PropertiesInfo(PortalObject portalObject) {
324: Map objectProps = null;
325: switch (portalObject.getType()) {
326: case PortalObject.TYPE_CONTEXT:
327: objectProps = CONTEXT_PROPERTIES;
328: break;
329: case PortalObject.TYPE_PORTAL:
330: objectProps = PORTAL_PROPERTIES;
331: break;
332: case PortalObject.TYPE_PAGE:
333: objectProps = PAGE_PROPERTIES;
334: break;
335: case PortalObject.TYPE_WINDOW:
336: objectProps = WINDOW_PROPERTIES;
337: break;
338: }
339:
340: // Add predefined properties
341: Map entries = new HashMap(objectProps);
342:
343: //
344: for (Iterator i = portalObject.getDeclaredProperties()
345: .entrySet().iterator(); i.hasNext();) {
346: Map.Entry entry = (Map.Entry) i.next();
347: String name = (String) entry.getKey();
348:
349: // Add additional properties
350: if (!ALL_PROPERTIES.containsKey(name)) {
351: LocalizedString displayName = new LocalizedString(name);
352: PropertyInfo info = new PropertyInfo(
353: name,
354: displayName,
355: new LocalizedString("The " + name + " property"),
356: "java.lang.String",
357: PropertyInfo.READ_WRITE_ACCESS_MODE,
358: PropertyInfo.PUBLIC_SCOPE);
359: entries.put(name, info);
360: }
361: }
362:
363: //
364: this .entries = entries;
365: }
366:
367: public Set getNames() {
368: return entries.keySet();
369: }
370:
371: public PropertyInfo getPropertyInfo(String name) {
372: return (PropertyInfo) entries.get(name);
373: }
374:
375: public static boolean isControlProperty(String name) {
376: return CONTROL_PROPERTIES.containsKey(name);
377: }
378:
379: public static PropertyInfo getControlPropertyInfo(String name) {
380: return (PropertyInfo) CONTROL_PROPERTIES.get(name);
381: }
382:
383: }
|