KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > myfaces > application > TreeStructureManager


1 /*
2  * Copyright 2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.myfaces.application;
17
18 import org.apache.myfaces.util.ClassUtils;
19
20 import javax.faces.component.UIComponent;
21 import javax.faces.component.UIViewRoot;
22 import java.io.Serializable JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.Iterator JavaDoc;
25 import java.util.List JavaDoc;
26 import java.util.Map JavaDoc;
27
28 /**
29  * @author Manfred Geiler (latest modification by $Author: matze $)
30  * @version $Revision: 1.6 $ $Date: 2004/10/13 11:50:59 $
31  */

32 public class TreeStructureManager
33 {
34     //private static final Log log = LogFactory.getLog(TreeStructureManager.class);
35

36     //private FacesContext _facesContext;
37

38     public TreeStructureManager()
39     {
40         //_facesContext = facesContext;
41
}
42
43     public Object JavaDoc buildTreeStructureToSave(UIViewRoot viewRoot)
44     {
45         return internalBuildTreeStructureToSave(viewRoot);
46     }
47
48     private TreeStructComponent internalBuildTreeStructureToSave(UIComponent component)
49     {
50         TreeStructComponent structComp = new TreeStructComponent(component.getClass().getName(),
51                                                                  component.getId());
52
53         //children
54
if (component.getChildCount() > 0)
55         {
56             List JavaDoc childList = component.getChildren();
57             List JavaDoc structChildList = new ArrayList JavaDoc();
58             for (int i = 0, len = childList.size(); i < len; i++)
59             {
60                 UIComponent child = (UIComponent)childList.get(i);
61                 if (!child.isTransient())
62                 {
63                     TreeStructComponent structChild = internalBuildTreeStructureToSave(child);
64                     structChildList.add(structChild);
65                 }
66             }
67             TreeStructComponent[] childArray = (TreeStructComponent[])structChildList.toArray(new TreeStructComponent[structChildList.size()]);
68             structComp.setChildren(childArray);
69         }
70
71         //facets
72
Map JavaDoc facetMap = component.getFacets();
73         if (!facetMap.isEmpty())
74         {
75             List JavaDoc structFacetList = new ArrayList JavaDoc();
76             for (Iterator JavaDoc it = facetMap.entrySet().iterator(); it.hasNext(); )
77             {
78                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc)it.next();
79                 UIComponent child = (UIComponent)entry.getValue();
80                 if (!child.isTransient())
81                 {
82                     String JavaDoc facetName = (String JavaDoc)entry.getKey();
83                     TreeStructComponent structChild = internalBuildTreeStructureToSave(child);
84                     structFacetList.add(new Object JavaDoc[] {facetName, structChild});
85                 }
86             }
87             Object JavaDoc[] facetArray = structFacetList.toArray(new Object JavaDoc[structFacetList.size()]);
88             structComp.setFacets(facetArray);
89         }
90
91         return structComp;
92     }
93
94
95     public UIViewRoot restoreTreeStructure(Object JavaDoc treeStructRoot)
96     {
97         if (treeStructRoot instanceof TreeStructComponent)
98         {
99             return (UIViewRoot)internalRestoreTreeStructure((TreeStructComponent)treeStructRoot);
100         }
101         else
102         {
103             throw new IllegalArgumentException JavaDoc("TreeStructure of type " + treeStructRoot.getClass().getName() + " is not supported.");
104         }
105     }
106
107     private UIComponent internalRestoreTreeStructure(TreeStructComponent treeStructComp)
108     {
109         String JavaDoc compClass = treeStructComp.getComponentClass();
110         String JavaDoc compId = treeStructComp.getComponentId();
111         UIComponent component = (UIComponent)ClassUtils.newInstance(compClass);
112         component.setId(compId);
113
114         //children
115
TreeStructComponent[] childArray = treeStructComp.getChildren();
116         if (childArray != null)
117         {
118             List JavaDoc childList = component.getChildren();
119             for (int i = 0, len = childArray.length; i < len; i++)
120             {
121                 UIComponent child = internalRestoreTreeStructure(childArray[i]);
122                 childList.add(child);
123             }
124         }
125
126         //facets
127
Object JavaDoc[] facetArray = treeStructComp.getFacets();
128         if (facetArray != null)
129         {
130             Map JavaDoc facetMap = component.getFacets();
131             for (int i = 0, len = facetArray.length; i < len; i++)
132             {
133                 Object JavaDoc[] tuple = (Object JavaDoc[])facetArray[i];
134                 String JavaDoc facetName = (String JavaDoc)tuple[0];
135                 TreeStructComponent structChild = (TreeStructComponent)tuple[1];
136                 UIComponent child = internalRestoreTreeStructure(structChild);
137                 facetMap.put(facetName, child);
138             }
139         }
140
141         return component;
142     }
143
144
145     public static class TreeStructComponent
146             implements Serializable JavaDoc
147     {
148         private String JavaDoc _componentClass;
149         private String JavaDoc _componentId;
150         private TreeStructComponent[] _children = null; // Array of children
151
private Object JavaDoc[] _facets = null; // Array of Array-tuples with Facetname and TreeStructComponent
152

153         TreeStructComponent(String JavaDoc componentClass, String JavaDoc componentId)
154         {
155             _componentClass = componentClass;
156             _componentId = componentId;
157         }
158
159         public String JavaDoc getComponentClass()
160         {
161             return _componentClass;
162         }
163
164         public String JavaDoc getComponentId()
165         {
166             return _componentId;
167         }
168
169         void setChildren(TreeStructComponent[] children)
170         {
171             _children = children;
172         }
173
174         TreeStructComponent[] getChildren()
175         {
176             return _children;
177         }
178
179         Object JavaDoc[] getFacets()
180         {
181             return _facets;
182         }
183
184         void setFacets(Object JavaDoc[] facets)
185         {
186             _facets = facets;
187         }
188     }
189
190 }
191
Popular Tags