KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > config > ConfigModule


1 /*
2  * Created on Apr 15, 2005
3  * by alex
4  *
5  */

6 package com.nightlabs.ipanema.config;
7
8 import java.io.Serializable JavaDoc;
9 import java.lang.reflect.Constructor JavaDoc;
10 import java.lang.reflect.InvocationTargetException JavaDoc;
11 import java.util.Collection JavaDoc;
12 import java.util.HashMap JavaDoc;
13 import java.util.HashSet JavaDoc;
14 import java.util.Map JavaDoc;
15 import java.util.Set JavaDoc;
16
17 import javax.jdo.PersistenceManager;
18 import javax.jdo.Query;
19
20 import com.nightlabs.config.CfModList;
21 import com.nightlabs.inheritance.FieldInheriter;
22 import com.nightlabs.inheritance.FieldMetaData;
23 import com.nightlabs.inheritance.Inheritable;
24 import com.nightlabs.inheritance.SimpleFieldInheriter;
25
26 /**
27  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
28  * @author Niklas Schiffler <nick@nightlabs.de>
29  *
30  * @jdo.persistence-capable
31  * identity-type = "application"
32  * objectid-class = "com.nightlabs.ipanema.config.id.ConfigModuleID"
33  * detachable = "true"
34  *
35  * @jdo.inheritance strategy = "new-table"
36  *
37  * @jdo.query
38  * name="getConfigModule"
39  * query="SELECT
40  * WHERE organisationID == paramOrganisationID &&
41  * configID == paramConfigID &&
42  * implementationClassName == paramImplClassName &&
43  * cfModKey == paramCfModKey
44  * PARAMETERS String paramOrganisationID, String paramConfigID, String paramImplClassName, String paramCfModKey
45  * IMPORTS import java.lang.String"
46  *
47  * @jdo.fetch-group name="ConfigModule.this" fetch-group-names="default, values"
48  */

49 public abstract class ConfigModule implements Serializable JavaDoc, Inheritable
50 {
51     public static final String JavaDoc FETCH_GROUP_THIS_CONFIG_MODULE = "ConfigModule.this";
52   
53   public static final String JavaDoc QUERY_GET_CONFIGMODULE = "getConfigModule";
54     
55     protected ConfigModule()
56   {
57         super();
58     }
59     
60   protected ConfigModule(Config cfg, String JavaDoc cfModID)
61   {
62     setPrimaryKeyFields(cfg.getOrganisationID(), cfg.getConfigID(), cfg.getClass().getName(), cfModID);
63   }
64
65   public ConfigModule(String JavaDoc organisationID, String JavaDoc configID, String JavaDoc implClassName, String JavaDoc cfModID)
66   {
67     setPrimaryKeyFields(organisationID, configID, implClassName, cfModID);
68     }
69     
70     /**
71      * @jdo.field primary-key="true"
72      * @jdo.column length="100"
73      */

74     private String JavaDoc organisationID;
75
76     /**
77      * @jdo.field primary-key="true"
78      * @jdo.column length="100"
79      */

80     private String JavaDoc configID;
81
82   /**
83    * @jdo.field primary-key="true"
84    * @jdo.column length="100"
85    */

86   protected String JavaDoc implementationClassName;
87
88     /**
89      * @jdo.field primary-key="true"
90      * @jdo.column length="150"
91      */

92     private String JavaDoc cfModKey;
93     
94     /**
95      * @jdo.field persistence-modifier="persistent"
96      */

97     private boolean allowUserOverride;
98     
99     /**
100      * @jdo.field persistence-modifier="persistent"
101      */

102     private String JavaDoc cfModID;
103     
104     // TODO: reuse mapped by when JPOX Bug fixed
105
/**
106      * key: String fieldName
107      * value: ConfigModuleSimpleFieldMetaData fieldMetaData
108      *
109      * @jdo.field
110      * persistence-modifier="persistent"
111      * collection-type="map"
112      * key-type="java.lang.String"
113      * value-type="ConfigModuleSimpleFieldMetaData"
114      * dependent="true"
115      * !mapped-by="configModule"
116      * @jdo.join
117      * @!jdo.map-vendor-extension vendor-name="jpox" key="key-field" value="fieldName"
118      */

119     protected Map JavaDoc fieldMetaDataMap = new HashMap JavaDoc();
120     
121     private void setPrimaryKeyFields(String JavaDoc organisationID, String JavaDoc configID, String JavaDoc implClassName, String JavaDoc cfModID)
122   {
123         this.organisationID = organisationID;
124         this.configID = configID;
125     this.implementationClassName = implClassName;
126         cfModKey = getCfModKey(this.getClass(), cfModID);
127         this.cfModID = cfModID;
128     }
129     
130     public static String JavaDoc getCfModKey(Class JavaDoc cfModClass, String JavaDoc cfModID) {
131         String JavaDoc result = cfModClass.getName();
132         if (cfModID != null && "".equals(cfModID))
133             result += "/" + cfModID;
134         return result;
135     }
136
137     public String JavaDoc getOrganisationID()
138   {
139         return organisationID;
140     }
141     
142     public String JavaDoc getConfigID()
143   {
144         return configID;
145     }
146     
147     public String JavaDoc getCfModKey()
148   {
149         return cfModKey;
150     }
151     
152     public String JavaDoc getCfModID()
153   {
154         return cfModID;
155     }
156     
157     /**
158      * This flag determines if a User's settings
159      * will override this ConfigModule if this
160      * one is member of a UserConfigGroup.
161      */

162     public boolean isAllowUserOverride()
163   {
164         return allowUserOverride;
165     }
166     
167     public void setAllowUserOverride(boolean allowUserOverride)
168   {
169         this.allowUserOverride = allowUserOverride;
170     }
171     
172     
173     /**
174      * Will be called on creation to allow the config module to set
175      * default values.
176      */

177     public abstract void init();
178     
179     private static SimpleFieldInheriter fieldInheriter = new SimpleFieldInheriter();
180     
181     public FieldInheriter getFieldInheriter(String JavaDoc fieldName)
182   {
183         return fieldInheriter;
184     }
185
186     private static Set JavaDoc nonInheritableFields = new HashSet JavaDoc();
187     
188     public FieldMetaData getFieldMetaData(String JavaDoc fieldName)
189   {
190         if (fieldName.startsWith("jdo"))
191             return null;
192         
193         synchronized (nonInheritableFields)
194     {
195             if (nonInheritableFields.isEmpty())
196       {
197                 nonInheritableFields.add("organisationID");
198                 nonInheritableFields.add("configID");
199                 nonInheritableFields.add("cfModID");
200                 nonInheritableFields.add("cfModKey");
201                 nonInheritableFields.add("allowUserOverride");
202             }
203             if (nonInheritableFields.contains(fieldName))
204                 return null;
205         }
206         
207         ConfigModuleSimpleFieldMetaData fmd = (ConfigModuleSimpleFieldMetaData)fieldMetaDataMap.get(fieldName);
208         if (fmd == null) {
209                 fmd = new ConfigModuleSimpleFieldMetaData(this, fieldName);
210                 fieldMetaDataMap.put(fieldName, fmd);
211         }
212         return fmd;
213     }
214   
215   public static ConfigModule createNewConfigModule(PersistenceManager pm, boolean makePersistent, Class JavaDoc cfModClass, Config config, String JavaDoc cfModID)
216   throws InstantiationException JavaDoc, IllegalAccessException JavaDoc, ClassCastException JavaDoc, SecurityException JavaDoc, NoSuchMethodException JavaDoc, IllegalArgumentException JavaDoc, InvocationTargetException JavaDoc
217   {
218     Constructor JavaDoc constructor = cfModClass.getConstructor(new Class JavaDoc[]{Config.class, String JavaDoc.class});
219     ConfigModule result = (ConfigModule)constructor.newInstance(new Object JavaDoc[] {config, cfModID});
220     result.init();
221     if (makePersistent)
222       pm.makePersistent(result);
223     return result;
224   }
225
226   public static ConfigModule getConfigModule(PersistenceManager pm, Config config, Class JavaDoc cfModClass, String JavaDoc cfModID)
227   {
228     Query q = pm.newNamedQuery(ConfigModule.class, QUERY_GET_CONFIGMODULE);
229     Map JavaDoc args = new HashMap JavaDoc();
230     args.put("paramOrganisationID", config.getOrganisationID());
231     args.put("paramConfigID", config.getConfigID());
232     args.put("paramImplClassName", config.getClass().getName());
233     args.put("paramCfModKey", getCfModKey(cfModClass, cfModID));
234     q.setUnique(true);
235     return (ConfigModule)q.execute(args);
236   }
237
238 }
239
Popular Tags