1 16 package org.jmanage.core.config; 17 18 import java.util.*; 19 import java.io.File ; 20 21 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 35 applicationConfigs.addAll(configReader.read()); 36 37 new File (ConfigConstants.DEFAULT_CONFIG_FILE_NAME).renameTo( 38 new File (ConfigConstants.BOOTED_CONFIG_FILE_NAME)); 39 40 ConfigWriter.getInstance().write(applicationConfigs); 41 } 42 43 public static ApplicationConfig getApplicationConfigByName(String 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 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 86 public static List getApplications(){ 87 return applicationConfigs; 88 } 89 90 private static final Object writeLock = new Object (); 91 92 public static void addApplication(ApplicationConfig config) 93 throws DuplicateApplicationNameException { 94 95 synchronized(writeLock){ 96 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 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 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 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 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 appName, String 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 { 204 private final String appName; 206 207 public DuplicateApplicationNameException(String appName){ 208 super("Application name: " + appName); 209 this.appName = appName; 210 } 211 212 public String getAppName(){ 213 return appName; 214 } 215 } 216 } 217 | Popular Tags |