KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jmanage > core > config > ApplicationConfigManager


1 /**
2  * Copyright 2004-2005 jManage.org
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.jmanage.core.config;
17
18 import java.util.*;
19 import java.io.File JavaDoc;
20
21 /**
22  *
23  * date: Jun 13, 2004
24  * @author Rakesh Kalra
25  */

26 public class ApplicationConfigManager{
27
28     private static List applicationConfigs =
29             Collections.synchronizedList(new LinkedList());
30
31     private static final ConfigReader configReader = ConfigReader.getInstance();
32
33     static{
34         /* read the configuration */
35         applicationConfigs.addAll(configReader.read());
36         /* create a backup of configuration file */
37         new File JavaDoc(ConfigConstants.DEFAULT_CONFIG_FILE_NAME).renameTo(
38                 new File JavaDoc(ConfigConstants.BOOTED_CONFIG_FILE_NAME));
39         /* write from memory */
40         ConfigWriter.getInstance().write(applicationConfigs);
41     }
42
43     public static ApplicationConfig getApplicationConfigByName(String JavaDoc appName){
44
45         for(Iterator it=applicationConfigs.iterator(); it.hasNext(); ){
46             ApplicationConfig appConfig = (ApplicationConfig)it.next();
47             if(appConfig.getName().equals(appName)){
48                 return appConfig;
49             }
50             if(appConfig.isCluster()){
51                 for(Iterator it2=appConfig.getApplications().iterator(); it2.hasNext();){
52                     appConfig = (ApplicationConfig)it2.next();
53                     if(appConfig.getName().equals(appName)){
54                         return appConfig;
55                     }
56                 }
57             }
58         }
59         return null;
60     }
61
62     public static ApplicationConfig getApplicationConfig(String JavaDoc applicationId){
63
64         for(Iterator it=applicationConfigs.iterator(); it.hasNext(); ){
65             ApplicationConfig appConfig = (ApplicationConfig)it.next();
66             if(appConfig.getApplicationId().equals(applicationId)){
67                 return appConfig;
68             }
69             if(appConfig.isCluster()){
70                 for(Iterator it2=appConfig.getApplications().iterator(); it2.hasNext();){
71                     appConfig = (ApplicationConfig)it2.next();
72                     if(appConfig.getApplicationId().equals(applicationId)){
73                         return appConfig;
74                     }
75                 }
76             }
77         }
78         return null;
79     }
80
81     /**
82      * Retrieve all configured applications.
83      *
84      * @return
85      */

86     public static List getApplications(){
87         return applicationConfigs;
88     }
89
90     private static final Object JavaDoc writeLock = new Object JavaDoc();
91
92     public static void addApplication(ApplicationConfig config)
93         throws DuplicateApplicationNameException {
94
95         synchronized(writeLock){
96             // validate the application name
97
validateAppName(config.getName(), null);
98             applicationConfigs.add(config);
99             saveConfig();
100         }
101     }
102
103     public static void updateApplication(ApplicationConfig config)
104         throws DuplicateApplicationNameException {
105
106         assert config != null: "application config is null";
107
108         synchronized(writeLock){
109             // validate the application name
110
validateAppName(config.getName(), config.getApplicationId());
111
112             int index = applicationConfigs.indexOf(config);
113             if(index != -1){
114                 applicationConfigs.remove(index);
115                 applicationConfigs.add(index, config);
116             }else{
117                 /* its part of a cluster */
118                 assert config.isCluster() == false;
119                 ApplicationConfig clusterConfig = config.getClusterConfig();
120                 assert clusterConfig != null;
121                 index = clusterConfig.getApplications().indexOf(config);
122                 assert index != -1: "application not found in cluster";
123                 clusterConfig.getApplications().remove(index);
124                 clusterConfig.getApplications().add(index, config);
125             }
126             saveConfig();
127         }
128     }
129
130     public static ApplicationConfig deleteApplication(String JavaDoc applicationId) {
131         assert applicationId != null: "applicationId is null";
132         ApplicationConfig config = getApplicationConfig(applicationId);
133         assert config != null: "there is no application with id="+applicationId;
134         deleteApplication(config);
135         return(config);
136     }
137
138     public static void deleteApplication(ApplicationConfig config) {
139         assert config != null: "application config is null";
140         if(!applicationConfigs.remove(config)){
141             /* this app is in a cluster. remove from cluster */
142             for(Iterator it=applicationConfigs.iterator(); it.hasNext(); ){
143                 ApplicationConfig appConfig = (ApplicationConfig)it.next();
144                 if(appConfig.isCluster()){
145                     ApplicationClusterConfig clusterConfig =
146                             (ApplicationClusterConfig)appConfig;
147                     if(clusterConfig.removeApplication(config)){
148                         break;
149                     }
150                 }
151             }
152         }
153         saveConfig();
154     }
155
156     private static void saveConfig(){
157         ConfigWriter writer = ConfigWriter.getInstance();
158         writer.write(applicationConfigs);
159     }
160
161     public static List getAllApplications(){
162         Iterator appItr = applicationConfigs.iterator();
163         List applications = new LinkedList();
164         while(appItr.hasNext()){
165             ApplicationConfig appConfig = (ApplicationConfig)appItr.next();
166             applications.add(appConfig);
167             if(appConfig.isCluster()){
168                 applications.addAll(appConfig.getApplications());
169             }
170         }
171         return applications;
172     }
173
174     public static List getAllAlerts() {
175         Iterator appItr = applicationConfigs.iterator();
176         List alerts = new LinkedList();
177         while(appItr.hasNext()){
178             ApplicationConfig appConfig = (ApplicationConfig)appItr.next();
179             alerts.addAll(appConfig.getAlerts());
180             if(appConfig.isCluster()){
181                 for(Iterator it=appConfig.getApplications().iterator();
182                     it.hasNext();){
183                     ApplicationConfig childAppConfig =
184                             (ApplicationConfig)it.next();
185                     alerts.addAll(childAppConfig.getAlerts());
186                 }
187             }
188         }
189         return alerts;
190     }
191
192     private static void validateAppName(String JavaDoc appName, String JavaDoc applicationId)
193         throws DuplicateApplicationNameException {
194         for(Iterator it=getApplications().iterator(); it.hasNext(); ){
195             ApplicationConfig appConfig = (ApplicationConfig)it.next();
196             if(!appConfig.getApplicationId().equals(applicationId) &&
197                     (appConfig.getName().toUpperCase()).equals(appName.toUpperCase())) {
198                 throw new DuplicateApplicationNameException(appName);
199             }
200         }
201     }
202
203     public static class DuplicateApplicationNameException extends Exception JavaDoc{
204         // app name that is duplicate
205
private final String JavaDoc appName;
206
207         public DuplicateApplicationNameException(String JavaDoc appName){
208             super("Application name: " + appName);
209             this.appName = appName;
210         }
211
212         public String JavaDoc getAppName(){
213             return appName;
214         }
215     }
216 }
217
Popular Tags