- Timestamp:
- 2011-06-16 15:53:57 (11 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/core/kauri-runtime/src/main/java/org/kauriproject/runtime/model/KauriRuntimeModelBuilder.java
r1877 r1907 27 27 import java.io.File; 28 28 import java.io.FilenameFilter; 29 import java.io.IOException; 29 30 import java.util.*; 30 31 import java.util.regex.Pattern; … … 57 58 } 58 59 60 Stack<String> wiringFileStack = new Stack<String>(); // used to detect recursive wiring.xml inclusions 61 List<ModuleDefinition> modules = new ArrayList<ModuleDefinition>(); 62 63 buildModules(modules, wiringFileStack, runtimeConf, repository, artifactSourceLocations); 64 65 // Remove disabled module entries 66 Iterator<ModuleDefinition> it = modules.iterator(); 67 while (it.hasNext()) { 68 ModuleDefinition entry = it.next(); 69 if (disabledModuleIds.contains(entry.getId())) 70 it.remove(); 71 } 72 73 for (ModuleDefinition md : modules) 74 model.addModule(md); 75 76 return model; 77 } 78 79 private static void buildModules(List<ModuleDefinition> modules, Stack<String> wiringFileStack, Conf runtimeConf, 80 ArtifactRepository repository, SourceLocations artifactSourceLocations) throws Exception { 81 59 82 Conf modulesConf = runtimeConf.getRequiredChild("modules"); 60 61 List<ModuleDefinition> modules = new ArrayList<ModuleDefinition>();62 83 List<Conf> importConfs = modulesConf.getChildren(); 63 84 for (Conf importConf : importConfs) { … … 65 86 ModuleSourceType sourceType = null; 66 87 String version = "unknown"; 67 String id = importConf.getAttribute("id");88 String id = null; 68 89 if (importConf.getName().equals("file")) { 69 90 String path = PropertyResolver.resolveProperties(importConf.getAttribute("path")); 70 fileToImport = new File(path); 71 sourceType = ModuleSourceType.JAR; 91 File file = new File(path); 92 if (file.getName().toLowerCase().endsWith(".xml")) { 93 // Import a wiring.xml-type file 94 includeWiring(file, modules, wiringFileStack, repository, artifactSourceLocations); 95 } else { 96 id = importConf.getAttribute("id"); 97 fileToImport = new File(path); 98 sourceType = ModuleSourceType.JAR; 99 } 72 100 } else if (importConf.getName().equals("artifact")) { 101 id = importConf.getAttribute("id"); 73 102 String groupId = importConf.getAttribute("groupId"); 74 103 String artifactId = importConf.getAttribute("artifactId"); … … 91 120 } 92 121 } else if (importConf.getName().equals("directory")) { 122 id = importConf.getAttribute("id"); 93 123 String dirName = PropertyResolver.resolveProperties(importConf.getAttribute("path")); 94 124 File dir = new File(dirName); 95 125 if (dir.exists() && dir.isDirectory()) { 96 File[] jarFiles = dir.listFiles(new JarFilter());126 File[] files = dir.listFiles(); 97 127 // order of imports is important, to provide some deterministic behaviour, sort the entries by name 98 Arrays.sort(jarFiles, new FileNameComparator()); 99 for (File file : jarFiles) { 100 String genId = id + "-" + stripJarExt(file.getName()); 101 modules.add(new ModuleDefinition(genId, file, ModuleSourceType.JAR)); 128 Arrays.sort(files, new FileNameComparator()); 129 for (File file : files) { 130 if (file.isDirectory()) { 131 // skip 132 } else if (file.getName().toLowerCase().endsWith(".jar")) { 133 String genId = id + "-" + stripJarExt(file.getName()); 134 modules.add(new ModuleDefinition(genId, file, ModuleSourceType.JAR)); 135 } else if (file.getName().toLowerCase().endsWith(".xml")) { 136 // Import a wiring.xml-type file 137 includeWiring(file, modules, wiringFileStack, repository, artifactSourceLocations); 138 } 102 139 } 103 140 } … … 120 157 } 121 158 } 122 123 // Remove disabled module entries 124 Iterator<ModuleDefinition> it = modules.iterator(); 125 while (it.hasNext()) { 126 ModuleDefinition entry = it.next(); 127 if (disabledModuleIds.contains(entry.getId())) 128 it.remove(); 129 } 130 131 for (ModuleDefinition md : modules) 132 model.addModule(md); 133 134 return model; 159 } 160 161 private static void includeWiring(File file, List<ModuleDefinition> modules, Stack<String> wiringFileStack, 162 ArtifactRepository repository, SourceLocations artifactSourceLocations) throws Exception { 163 164 String key = file.getCanonicalPath(); 165 166 if (wiringFileStack.contains(key)) { 167 throw new KauriRTException("Recursive loading of wiring.xml-type file detected: " + key); 168 } 169 170 Conf conf = XmlConfBuilder.build(file); 171 172 // go recursive 173 wiringFileStack.push(key); 174 buildModules(modules, wiringFileStack, conf, repository, artifactSourceLocations); 175 wiringFileStack.pop(); 135 176 } 136 177 … … 296 337 } 297 338 298 private static class JarFilter implements FilenameFilter {299 public boolean accept(File dir, String name) {300 return name.toLowerCase().endsWith(".jar");301 }302 }303 304 339 private static class FileNameComparator implements Comparator<File> { 305 340 public int compare(File o1, File o2) {
Note: See TracChangeset
for help on using the changeset viewer.