Source code: com/jcorporate/expresso/services/controller/configuration/ShowContainerTree.java
1 package com.jcorporate.expresso.services.controller.configuration;
2
3 /* ====================================================================
4 * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
5 *
6 * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. The end-user documentation included with the redistribution,
21 * if any, must include the following acknowledgment:
22 * "This product includes software developed by Jcorporate Ltd.
23 * (http://www.jcorporate.com/)."
24 * Alternately, this acknowledgment may appear in the software itself,
25 * if and wherever such third-party acknowledgments normally appear.
26 *
27 * 4. "Jcorporate" and product names such as "Expresso" must
28 * not be used to endorse or promote products derived from this
29 * software without prior written permission. For written permission,
30 * please contact info@jcorporate.com.
31 *
32 * 5. Products derived from this software may not be called "Expresso",
33 * or other Jcorporate product names; nor may "Expresso" or other
34 * Jcorporate product names appear in their name, without prior
35 * written permission of Jcorporate Ltd.
36 *
37 * 6. No product derived from this software may compete in the same
38 * market space, i.e. framework, without prior written permission
39 * of Jcorporate Ltd. For written permission, please contact
40 * partners@jcorporate.com.
41 *
42 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
43 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
44 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
45 * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
46 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
47 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
48 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
49 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
50 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
51 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
52 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53 * SUCH DAMAGE.
54 * ====================================================================
55 *
56 * This software consists of voluntary contributions made by many
57 * individuals on behalf of the Jcorporate Ltd. Contributions back
58 * to the project(s) are encouraged when you make modifications.
59 * Please send them to support@jcorporate.com. For more information
60 * on Jcorporate Ltd. and its products, please see
61 * <http://www.jcorporate.com/>.
62 *
63 * Portions of this software are based upon other open source
64 * products and are subject to their respective licenses.
65 */
66
67 import com.jcorporate.expresso.core.controller.Block;
68 import com.jcorporate.expresso.core.controller.ControllerException;
69 import com.jcorporate.expresso.core.controller.ControllerRequest;
70 import com.jcorporate.expresso.core.controller.ControllerResponse;
71 import com.jcorporate.expresso.core.controller.ErrorCollection;
72 import com.jcorporate.expresso.core.controller.NonHandleableException;
73 import com.jcorporate.expresso.core.controller.Transition;
74 import com.jcorporate.expresso.kernel.Containable;
75 import com.jcorporate.expresso.kernel.ExpressoComponent;
76 import com.jcorporate.expresso.kernel.RootContainerInterface;
77 import com.jcorporate.expresso.services.controller.Configuration;
78
79 import java.util.Iterator;
80
81
82 /**
83 * State that shows the container hierarchy in a tree. The tree is rendered
84 * in the javascript tree in the left of the panel.
85 *
86 * @author Michael Rimov
87 * @version $Revision: 1.5 $ on $Date: 2004/11/17 20:48:17 $
88 * @since Expresso 5.1
89 */
90
91 public class ShowContainerTree extends ConfigurationBase {
92
93
94 public ShowContainerTree() {
95 super("showContainerTree", "Show Container Tree");
96 }
97
98 public void run(ControllerRequest request, ControllerResponse response)
99 throws NonHandleableException, ControllerException {
100 super.run(request, response);
101
102 response.setTitle("Show Container Hierarchy");
103
104 RootContainerInterface root = this.getRuntime(request);
105
106 if (root == null) {
107 ErrorCollection ec = new ErrorCollection();
108 ec.addError("There is no runtime available by this name");
109 response.saveErrors(ec);
110 return;
111 }
112
113 Block rootBlock = new Block("root");
114 rootBlock.setLabel("Root of Runtime");
115 response.add(rootBlock);
116 this.addShowTransition((ExpressoComponent) root, rootBlock);
117 addOneContainer(rootBlock, root);
118 }
119
120 /**
121 * Adds the transition to each block given each component to show any
122 * particular component
123 *
124 * @param component the ExpressoComponent to create the transition for
125 * @param parent the block to add the transition to
126 * @throws ControllerException upon error
127 */
128 protected void addShowTransition(ExpressoComponent component, Block parent) throws ControllerException {
129 Transition t = new Transition("showContainerTransition", component.getMetaData()
130 .getName(), Configuration.class, Configuration.STATE_SHOW_COMPONENT);
131 t.addParam("runtimeName", lc.getPath(component));
132 parent.add(t);
133 }
134
135 /**
136 * Add a container and links to the block tree
137 *
138 * @param parentBlock the parent block to add the subcomponents to
139 * @param current the current container
140 * @throws ControllerException upon error
141 */
142 protected void addOneContainer(Block parentBlock, Containable current) throws ControllerException {
143 for (Iterator i = current.getContainerImplementation().getChildComponents().keySet().iterator();
144 i.hasNext();) {
145
146 ExpressoComponent ec = (ExpressoComponent) i.next();
147 if (ec instanceof Containable) {
148 Block containerBlock = new Block(ec.getMetaData().getName());
149 parentBlock.add(containerBlock);
150 containerBlock.setLabel(ec.getMetaData().getName());
151 this.addShowTransition(ec, containerBlock);
152 addOneContainer(containerBlock, (Containable) ec);
153 } else {
154 Transition t = new Transition(ec.getMetaData().getName(), ec.getMetaData()
155 .getName(), Configuration.class, Configuration.STATE_SHOW_COMPONENT);
156 t.addParam("runtimeName", lc.getPath(ec));
157 parentBlock.add(t);
158 }
159
160 }
161
162 }
163 }