001: /***************************************************************
002: * This file is part of the [fleXive](R) project.
003: *
004: * Copyright (c) 1999-2007
005: * UCS - unique computing solutions gmbh (http://www.ucs.at)
006: * All rights reserved
007: *
008: * The [fleXive](R) project is free software; you can redistribute
009: * it and/or modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation;
011: * either version 2 of the License, or (at your option) any
012: * later version.
013: *
014: * The GNU General Public License can be found at
015: * http://www.gnu.org/copyleft/gpl.html.
016: * A copy is found in the textfile GPL.txt and important notices to the
017: * license from the author are found in LICENSE.txt distributed with
018: * these libraries.
019: *
020: * This library is distributed in the hope that it will be useful,
021: * but WITHOUT ANY WARRANTY; without even the implied warranty of
022: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023: * GNU General Public License for more details.
024: *
025: * For further information about UCS - unique computing solutions gmbh,
026: * please see the company website: http://www.ucs.at
027: *
028: * For further information about [fleXive](R), please see the
029: * project website: http://www.flexive.org
030: *
031: *
032: * This copyright notice MUST APPEAR in all copies of the file!
033: ***************************************************************/package com.flexive.faces.components;
034:
035: import com.flexive.faces.FxJsfComponentUtils;
036: import static com.flexive.faces.FxJsfComponentUtils.getStringValue;
037: import com.flexive.faces.components.menu.TreeContextMenu;
038: import com.flexive.faces.javascript.tree.TreeNodeWriter;
039: import com.flexive.shared.exceptions.FxInvalidStateException;
040: import org.apache.commons.logging.Log;
041: import org.apache.commons.logging.LogFactory;
042:
043: import javax.faces.component.UIOutput;
044: import javax.faces.context.FacesContext;
045:
046: /**
047: * Tree root component. Renders the tree DIVs and javascript to show
048: * a dojo tree.
049: *
050: * @author Daniel Lichtenberger (daniel.lichtenberger@flexive.com), UCS - unique computing solutions gmbh (http://www.ucs.at)
051: * @version $Rev: 1 $
052: */
053: public class Tree extends UIOutput {
054: private static final Log LOG = LogFactory.getLog(Tree.class);
055:
056: private String name = null;
057: private String targetId = null;
058: private String clickHandler = null;
059: private String menuHandler = null;
060: private TreeNodeWriter nodeWriter = null;
061: private boolean contentTree = false;
062: private boolean selector = true;
063: private boolean dragAndDrop = false;
064: private boolean editor = false;
065: private boolean docIcons = false;
066: private boolean expandFirstNode = false;
067: private String extensionPoint = null;
068: private TreeContextMenu contextMenu = null;
069:
070: public Tree() {
071: setRendererType("flexive.Tree");
072: }
073:
074: public void setName(String name) {
075: this .name = name;
076: }
077:
078: public String getName() {
079: if (name == null) {
080: name = getStringValue(this , "name");
081: }
082: return name;
083: }
084:
085: public String getTargetId() {
086: if (targetId == null) {
087: targetId = getStringValue(this , "targetId");
088: }
089: return targetId;
090: }
091:
092: public void setTargetId(String targetId) {
093: this .targetId = targetId;
094: }
095:
096: public String getClickHandler() {
097: if (clickHandler == null) {
098: clickHandler = getStringValue(this , "clickHandler");
099: }
100: return clickHandler;
101: }
102:
103: public void setClickHandler(String clickHandler) {
104: this .clickHandler = clickHandler;
105: }
106:
107: public TreeNodeWriter getNodeWriter() {
108: return nodeWriter;
109: }
110:
111: public void setNodeWriter(TreeNodeWriter nodeWriter) {
112: this .nodeWriter = nodeWriter;
113: }
114:
115: /**
116: * Returns true for content trees. Due to lazy loading, content trees
117: * use a different tree controller.
118: *
119: * @return true for content trees
120: */
121: public boolean isContentTree() {
122: return contentTree;
123: }
124:
125: public void setContentTree(boolean contentTree) {
126: this .contentTree = contentTree;
127: }
128:
129: /**
130: * Returns true if the Dojo selector controller should be used.
131: *
132: * @return true if the Dojo selector controller should be used.
133: */
134: public boolean isSelector() {
135: return selector;
136: }
137:
138: public void setSelector(boolean selector) {
139: this .selector = selector;
140: }
141:
142: /**
143: * Returns true if the Dojo Drag&Drop controller should be used
144: *
145: * @return true if the Dojo Drag&Drop controller should be used
146: */
147: public boolean isDragAndDrop() {
148: return dragAndDrop;
149: }
150:
151: public void setDragAndDrop(boolean dragAndDrop) {
152: this .dragAndDrop = dragAndDrop;
153: }
154:
155: public TreeContextMenu getContextMenu() {
156: return contextMenu;
157: }
158:
159: /**
160: * Injected by an embedded TreeContextMenu tag.
161: *
162: * @param contextMenu the context menu
163: */
164: public void setContextMenu(TreeContextMenu contextMenu) {
165: if (this .contextMenu != null) {
166: throw new FxInvalidStateException(LOG,
167: "ex.jsf.tree.contextMenu.alreadyDefined")
168: .asRuntimeException();
169: }
170: this .contextMenu = contextMenu;
171: }
172:
173: public String getMenuHandler() {
174: return menuHandler;
175: }
176:
177: public void setMenuHandler(String menuHandler) {
178: this .menuHandler = menuHandler;
179: }
180:
181: public boolean isEditor() {
182: return editor;
183: }
184:
185: public void setEditor(boolean editor) {
186: this .editor = editor;
187: }
188:
189: public String getExtensionPoint() {
190: if (extensionPoint == null) {
191: return FxJsfComponentUtils.getStringValue(this ,
192: "extensionPoint");
193: }
194: return extensionPoint;
195: }
196:
197: public void setExtensionPoint(String extensionPoint) {
198: this .extensionPoint = extensionPoint;
199: }
200:
201: /**
202: * Return true if the document icons extension of the dojo tree should be used.
203: * If this is enabled, the tree node icons are determined by the node type ("nodeDocType")
204: * and are not rendered in the node itself.
205: *
206: * @return true if the document icons extension of the dojo tree should be used.
207: */
208: public boolean isDocIcons() {
209: return docIcons;
210: }
211:
212: public void setDocIcons(boolean docIcons) {
213: this .docIcons = docIcons;
214: }
215:
216: public boolean isExpandFirstNode() {
217: return expandFirstNode;
218: }
219:
220: public void setExpandFirstNode(boolean expandFirstNode) {
221: this .expandFirstNode = expandFirstNode;
222: }
223:
224: /**
225: * {@inheritDoc}
226: */
227: @Override
228: public Object saveState(FacesContext facesContext) {
229: Object[] state = new Object[12];
230: state[0] = super .saveState(facesContext);
231: state[1] = clickHandler;
232: state[2] = contentTree;
233: state[3] = docIcons;
234: state[4] = dragAndDrop;
235: state[5] = editor;
236: state[6] = expandFirstNode;
237: state[7] = menuHandler;
238: state[8] = name;
239: state[9] = selector;
240: state[10] = targetId;
241: state[11] = extensionPoint;
242: return state;
243: }
244:
245: /**
246: * {@inheritDoc}
247: */
248: @Override
249: public void restoreState(FacesContext facesContext, Object o) {
250: Object[] state = (Object[]) o;
251: super .restoreState(facesContext, state[0]);
252: clickHandler = (String) state[1];
253: contentTree = (Boolean) state[2];
254: docIcons = (Boolean) state[3];
255: dragAndDrop = (Boolean) state[4];
256: editor = (Boolean) state[5];
257: expandFirstNode = (Boolean) state[6];
258: menuHandler = (String) state[7];
259: name = (String) state[8];
260: selector = (Boolean) state[9];
261: targetId = (String) state[10];
262: extensionPoint = (String) state[11];
263: }
264: }
|