package gov.ornl.config; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import java.io.File; import java.util.*; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ConfigFactory { private int configIDs = 0; private Map<Integer, Configuration> configs = new HashMap(); private Lock configLock = new ReentrantLock(); private ConfigFactory.XMLReader reader = new ConfigFactory.XMLReader(this); public ConfigFactory() { } public Configuration getConfig(String paramString) { String str; if (paramString.charAt(0) == System.getProperty("file.separator").charAt(0)) str = paramString; else str = "config" + System.getProperty("file.separator") + paramString; File localFile = new File(str); if (localFile.exists()) { int i = createConfiguration(); addResource(i, localFile); return getConfiguration(i); } return null; } private int createConfiguration() { this.configLock.lock(); int i = this.configIDs++; this.configs.put(Integer.valueOf(i), new Configuration()); this.configLock.unlock(); return i; } private void addResource(int paramInt, File paramFile) { this.configLock.lock(); Configuration localConfiguration = (Configuration)this.configs.get(Integer.valueOf(paramInt)); if (localConfiguration != null) { localConfiguration.addPath(paramFile); this.reader.parseConfig(localConfiguration, paramFile); } this.configLock.unlock(); } public Configuration getConfiguration(int paramInt) { this.configLock.lock(); Configuration localConfiguration = (Configuration)this.configs.get(Integer.valueOf(paramInt)); if (localConfiguration != null) this.configs.remove(Integer.valueOf(paramInt)); this.configLock.unlock(); return localConfiguration; } public static void main(String[] paramArrayOfString) { try { ConfigFactory localConfigFactory = new ConfigFactory(); int i = localConfigFactory.createConfiguration(); localConfigFactory.addResource(i, new File("../../config/cluster-global.xml")); Configuration localConfiguration = localConfigFactory.getConfiguration(i); localConfiguration.write(System.out); } catch (Exception localException) { localException.printStackTrace(); } } class XMLReader { private SAXBuilder builder = new SAXBuilder(); public XMLReader(ConfigFactory paramConfigFactory) { } private Map<String, ConfigEntry> parseProperty(List<?> paramList) { HashMap localHashMap = new HashMap(); Iterator localIterator = paramList.iterator(); while (localIterator.hasNext()) { ConfigEntry localConfigEntry = null; Element localElement = (Element)localIterator.next(); List localList = localElement.getChildren(); Object localObject; if (localList.size() > 0) { localObject = parseProperty(localList); if (((Map)localObject).size() > 0) localConfigEntry = new ConfigEntry((Map)localObject); } else { localObject = new ArrayList(); String[] arrayOfString1 = localElement.getTextNormalize().split(","); for (String str1 : arrayOfString1) { String str2 = str1.trim(); if (!str2.equals("")) ((List)localObject).add(str1); } if (((List)localObject).size() > 0) localConfigEntry = new ConfigEntry((List)localObject); } if (localConfigEntry != null) localHashMap.put(localElement.getName(), localConfigEntry); } return localHashMap; } protected void parseConfig(Configuration paramConfiguration, File paramFile) { try { Document localDocument = this.builder.build(paramFile); Element localElement = localDocument.getRootElement(); if (localElement.getName().equals("configuration")) { List localList = localElement.getChildren(); Iterator localIterator = localList.iterator(); while (localIterator.hasNext()) { localElement = (Element)localIterator.next(); if (localElement.getName().equals("property")) { Map localMap = parseProperty(localElement.getChildren()); if (localMap.get("name") != null) { ConfigEntry localConfigEntry = new ConfigEntry(localMap); paramConfiguration.set(((ConfigEntry)localMap.get("name")).getValue(0), localConfigEntry); } } } } } catch (Exception localException) { localException.printStackTrace(); } } } } /* Location: * Qualified Name: gov.ornl.config.ConfigFactory * Java Class Version: 7 (51.0) * JD-Core Version: 0.6.1-SNAPSHOT */