KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > util > browser > core > panel > PanelPropertyContainer


1 /*===========================================================================
2
3 ObjectWeb Naming Context Framework
4 Copyright (C) 2002 USTL - LIFL - GOAL
5 Contact: architecture@objectweb.org
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20 USA
21
22 Initial developer(s): Jerome Moroy.
23 Contributor(s): ______________________________________.
24
25 ===========================================================================*/

26
27 package org.objectweb.util.browser.core.panel;
28
29 /** The console's imports */
30 import java.util.List JavaDoc;
31 import java.util.Iterator JavaDoc;
32
33 import org.objectweb.util.browser.api.Entry;
34 import org.objectweb.util.browser.core.api.BrowserProperty;
35 import org.objectweb.util.browser.core.api.PanelFactory;
36 import org.objectweb.util.browser.core.api.Role;
37 import org.objectweb.util.browser.core.common.ClassesInheritance;
38 import org.objectweb.util.browser.core.common.DefaultPropertyContainer;
39 import org.objectweb.util.browser.core.common.ExtendedBoolean;
40
41 /**
42  *
43  * It contains a cache memory which allow to have only one factory per class type.
44  * You can inherit parent panels at the type level but not at the role level.
45  *
46  * @author <a HREF="mailto:Jerome.Moroy@lifl.fr">Jerome Moroy</a>
47  * @version 0.1
48  */

49 public class PanelPropertyContainer extends DefaultPropertyContainer {
50
51     // ==================================================================
52
//
53
// Constructors.
54
//
55
// ==================================================================
56

57     /**
58      * Default contstructor
59      * @param loader The object to use to load new configuration
60      */

61     public PanelPropertyContainer(BrowserProperty loader) {
62         super(loader);
63     }
64
65     // ==================================================================
66
//
67
// Internal methods.
68
//
69
// ==================================================================
70

71     /**
72      * Tries to load an element for the associated class name.
73      * @param className The name of the class
74      * @return The founded entry or null
75      */

76     protected Entry getElement(String JavaDoc className, Role role, ExtendedBoolean nodeFound) {
77         return loader_.getPanel(className, role, nodeFound);
78     }
79
80     /**
81      * Adds the contextFactory to the container.
82      *
83      * @param id The name of the entry to be retrieved.
84      * @param object The contextFactory to add
85      *
86      */

87     protected void addEntry(String JavaDoc id, PanelFactory object) {
88         super.addEntry(id, object);
89     }
90
91     // ==================================================================
92
//
93
// Surcharging public methods for DefaultContextContainer class.
94
//
95
// ==================================================================
96

97     /**
98      * Adds the object to the container.
99      *
100      * This method does not modify the given name and the target context.
101      *
102      * @param id The name of the entry to be retrieved.
103      * @param object The object to add
104      *
105      */

106     public void addEntry(String JavaDoc id, Object JavaDoc object) {
107         if (object != null) {
108             addEntry(id, (PanelFactory) object);
109         }
110     }
111
112     /**
113      * Finds the object associated value.
114      * If the key doesn't exist, it looks for in interfaces implemented
115      * by this class and in superclass of the entity
116      * In order to have a string representation of the object,
117      * it takes his name (object.getClass().getName())
118      * @param object The research key
119      * @return The associated value - null is returned if no value exists
120      */

121     public Entry getRecursiveProperty(Object JavaDoc object) {
122         String JavaDoc cKey = getKey(object.getClass());
123         // Look for existing association into the cache
124
if (cache_.containsKey(cKey)) {
125             return getLocalEntry((String JavaDoc) cache_.get(cKey));
126         }
127         ClassesInheritance ci = new ClassesInheritance(object.getClass());
128         List JavaDoc list = ci.getInheritClasses();
129         Iterator JavaDoc it = list.iterator();
130         Entry returnedEntry = null;
131         PanelFactory panelFactory = null;
132         boolean isFirst = true;
133         while (it.hasNext()) {
134             String JavaDoc key = getKey((Class JavaDoc) it.next());;
135             Entry entry = getLocalEntry(key);
136             if (entry == null) {
137                 entry = tryToLoad(key);
138             }
139             if (entry != null) {
140                 if(isFirst){
141                     cache_.put(cKey, key);
142                     returnedEntry = entry;
143                     panelFactory = (PanelFactory)entry.getValue();
144                     isFirst = false;
145                 } else {
146                     panelFactory.addInheritPanelFactory((PanelFactory)entry.getValue());
147                 }
148                 PanelFactory currentPanelFactory = (PanelFactory)entry.getValue();
149                 if(!currentPanelFactory.inheritTypePanel()) break;
150             }
151         }
152         return returnedEntry;
153     }
154
155 }
156
Popular Tags