ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/core/ConfigurationManagerServant.java
Revision: 1.1
Committed: Mon Nov 20 17:11:44 2000 UTC (23 years, 6 months ago) by ajm
Branch: MAIN
Log Message:
Modified to change the name of the Configurator -> ConfigurationManager
Added initial work for multiple configurations

File Contents

# User Rev Content
1 ajm 1.1 //---PACKAGE DECLARATION---
2    
3     //---IMPORTS---
4     import uk.ac.ukc.iscream.core.*;
5     import java.util.*;
6     import java.io.*;
7     import org.omg.CORBA.*;
8     import org.omg.PortableServer.*;
9    
10     /**
11     * This class is essentially a Configuration factory.
12     * This class implements the Configurator IDL and allows
13     * other classes in the system ot obtain their Configuration
14     *
15     * On construction it requires a reference to the RootPOA
16     * to allow it to create Configuration objects to be
17     * returned.
18     *
19     * @author $Author: tdb1 $
20     * @version $Id: ConfiguratorServant.java,v 1.11 2000/11/16 18:01:47 tdb1 Exp $
21     */
22     class ConfigurationManagerServant extends ConfigurationManagerPOA {
23    
24     //---FINAL ATTRIBUTES---
25    
26     /**
27     * The current CVS revision of this class
28     */
29     public final String REVISION = "$Revision: 1.11 $";
30    
31     //---STATIC METHODS---
32    
33     //---CONSTRUCTORS---
34    
35     /**
36     * Creates a new ConfiguratorServant
37     *
38     * @param rootPOARef a reference to the RootPOA
39     * @param logRef a reference to the Logger
40     */
41     ConfigurationManagerServant(POA rootPOARef, Logger logRef) {
42     try {
43     _configPath = System.getProperty("uk.ac.ukc.iscream.ConfigurationLocation");
44     _systemConfigFile = System.getProperty("uk.ac.ukc.iscream.SystemConfigurationFile");
45     Properties systemConfigHolder = new Properties();
46     File systemConfigFile = new File(_configPath, _systemConfigFile);
47     systemConfigHolder.load(new FileInputStream(systemConfigFile));
48     ConfigurationServant ref = new ConfigurationServant(systemConfigHolder,systemConfigFile.lastModified(), _logRef);
49     org.omg.CORBA.Object objRef = _rootPOARef.servant_to_reference(ref);
50     _systemConfig = ConfigurationHelper.narrow(objRef);
51     _rootPOARef = rootPOARef;
52     _logRef = logRef;
53     _logRef.write(this.toString(), Logger.SYSINIT, "started");
54     _logRef.write(this.toString(), Logger.SYSMSG, "configuration location - " + _configPath);
55     _logRef.write(this.toString(), Logger.SYSMSG, "system configuration file - " + _systemConfigFile);
56     } catch (Exception e) {
57     // not sure what to do here
58     System.err.println("CONFIGURATION MANAGER ERROR: " + e);
59     e.printStackTrace(System.out);
60    
61     }
62     }
63    
64     //---PUBLIC METHODS---
65    
66     /**
67     * Returns a Configuration object which contains
68     * the configuration data requested by the calling
69     * object.
70     *
71     * If this method returns a null, that is an indication
72     * that no configuration currently exists for the requested
73     * source. The caller should handle appropriately.
74     *
75     * @param source the configuration required
76     * @return the Configuration
77     */
78     public Configuration getConfiguration(String source) {
79     _logRef.write(this.toString(), Logger.SYSMSG, "got request for " + source);
80    
81     Configuration config = null;
82     String configFile = _systemConfig.getProperty(source);
83     if (configFile != null) {
84     try {
85     String fileList = getIncludedFiles(configFile, configFile);
86    
87     // build the properites here from the filelist....
88     StringTokenizer st = new StringTokenizer(fileList, ",");
89     } catch (Exception e) {
90     // not sure what to do here
91     System.err.println("CONFIGURATION MANAGER ERROR: " + e);
92     e.printStackTrace(System.out);
93     }
94    
95     // on error...config remains null
96     } else {
97     config = _systemConfig;
98     }
99     return config;
100     }
101    
102     private String getIncludedFiles(String currentFile, String fileList) throws IOException, FileNotFoundException {
103     Properties properties = new Properties();
104     properties.load(new FileInputStream(new File(_configPath, currentFile)));
105     String includes = properties.getProperty("include");
106     StringTokenizer st = new StringTokenizer(includes, ",");
107     String returnList = "";
108     while (st.hasMoreTokens()) {
109     String nextFile = st.nextToken();
110     returnList += getIncludedFiles(nextFile, nextFile + "," + fileList );
111     }
112     return returnList;
113     }
114     /*
115     // get the requested config file
116     File configurationFile = new File(_configPath, getFileName(source));
117    
118     try {
119     // if we can't read it, we return null
120     if (configurationFile.canRead() == false) {
121     // do nothing, then we return null.
122    
123     // otherwise we return the Configuration
124     } else {
125     // create the servant for it
126     ConfigurationServant ref = new ConfigurationServant(configurationFile, _logRef);
127    
128     // narrow and return the Configuration
129     try {
130     org.omg.CORBA.Object objRef = _rootPOARef.servant_to_reference(ref);
131     configuration = ConfigurationHelper.narrow(objRef);
132    
133     } catch (Exception e) {
134     // not sure what to do here
135     System.err.println("ERROR: " + e);
136     e.printStackTrace(System.out);
137     }
138     }
139    
140     // if a SecurityManager is in place and it denies
141     // read access, then we just want to return false
142     } catch (SecurityException e) {
143     // do nothing it will return null
144     }
145    
146     return configuration;
147     }
148     */
149     /**
150     * When passed a source and a current value for the lastModified
151     * of the current configuration, this method compares the value
152     * to the actual value of the configuration file to determine
153     * whether or not the configuration has been modified.
154     *
155     * @return whether or not the configuration has been modified
156     */
157     public boolean isModified(String source, long currentLastModified) {
158     return new File(getFileName(source)).lastModified() > currentLastModified;
159     }
160    
161     /**
162     * Overrides the {@link java.lang.Object#toString() Object.toString()}
163     * method to provide clean logging (every class should have this).
164     *
165     * @return the name of this class and its CVS revision
166     */
167     public String toString() {
168     return this.getClass().getName() + "(" + REVISION.substring(11, REVISION.length() - 2) + ")";
169     }
170     //---PRIVATE METHODS---
171    
172     /**
173     * Constructs the name of a configuration file from a
174     * configuration source that is passed to it.
175     *
176     * @param source the source name
177     * @return the filename for the sources configuration
178     */
179     private String getFileName(String source) {
180     return source + ".properties";
181     }
182    
183     //---ACCESSOR/MUTATOR METHODS---
184    
185     //---ATTRIBUTES---
186    
187     /**
188     * Local storage of the RootPOA
189     */
190     private POA _rootPOARef;
191    
192     /**
193     * Local storage of the Logger
194     */
195     private Logger _logRef;
196    
197     /**
198     * The root path to all configurations
199     */
200     private String _configPath;
201    
202     private String _systemConfigFile;
203    
204     private Configuration _systemConfig;
205    
206     //---STATIC ATTRIBUTES---
207    
208     }