Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }