1 17 18 package org.apache.geronimo.system.resolver; 19 20 import java.io.File ; 21 import java.io.FileInputStream ; 22 import java.io.IOException ; 23 import java.util.Collection ; 24 import java.util.HashMap ; 25 import java.util.Iterator ; 26 import java.util.Map ; 27 import java.util.Properties ; 28 29 import org.apache.geronimo.gbean.GBeanInfo; 30 import org.apache.geronimo.gbean.GBeanInfoBuilder; 31 import org.apache.geronimo.kernel.repository.Artifact; 32 import org.apache.geronimo.kernel.repository.ArtifactManager; 33 import org.apache.geronimo.kernel.repository.ArtifactResolver; 34 import org.apache.geronimo.kernel.repository.DefaultArtifactResolver; 35 import org.apache.geronimo.kernel.repository.ListableRepository; 36 import org.apache.geronimo.system.serverinfo.ServerInfo; 37 38 41 public class ExplicitDefaultArtifactResolver extends DefaultArtifactResolver { 42 43 public ExplicitDefaultArtifactResolver(String versionMapLocation, 44 ArtifactManager artifactManager, 45 Collection repositories, 46 ServerInfo serverInfo ) throws IOException { 47 super(artifactManager, repositories, buildExplicitResolution(versionMapLocation, serverInfo)); 48 } 49 50 private static Map buildExplicitResolution(String versionMapLocation, ServerInfo serverInfo) throws IOException { 51 if (versionMapLocation == null) { 52 return null; 53 } 54 File location = serverInfo == null? new File (versionMapLocation): serverInfo.resolve(versionMapLocation); 55 FileInputStream in = new FileInputStream (location); 56 Properties properties = new Properties (); 57 try { 58 properties.load(in); 59 } finally { 60 in.close(); 61 } 62 return propertiesToArtifactMap(properties); 63 } 64 65 private static Map propertiesToArtifactMap(Properties properties) { 66 Map explicitResolution = new HashMap (); 67 for (Iterator iterator = properties.entrySet().iterator(); iterator.hasNext();) { 68 Map.Entry entry = (Map.Entry ) iterator.next(); 69 String key = (String ) entry.getKey(); 70 String resolvedString = (String ) entry.getValue(); 71 String [] parts = key.split("/", -1); 73 if (parts.length != 4) { 74 throw new IllegalArgumentException ("Invalid id: " + key); 75 } 76 Artifact source = new Artifact(parts[0], parts[1], (String )null, parts[3]); 77 Artifact resolved = Artifact.create(resolvedString); 78 explicitResolution.put(source,resolved); 79 } 80 return explicitResolution; 81 } 82 83 public static final GBeanInfo GBEAN_INFO; 84 85 static { 86 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(ExplicitDefaultArtifactResolver.class, "ArtifactResolver"); 87 infoFactory.addAttribute("versionMapLocation", String .class, true, true); 88 infoFactory.addReference("ArtifactManager", ArtifactManager.class, "ArtifactManager"); 89 infoFactory.addReference("Repositories", ListableRepository.class, "Repository"); 90 infoFactory.addReference("ServerInfo", ServerInfo.class, "GBean"); 91 infoFactory.addInterface(ArtifactResolver.class); 92 93 infoFactory.setConstructor(new String []{ 94 "versionMapLocation", 95 "ArtifactManager", 96 "Repositories", 97 "ServerInfo" 98 }); 99 100 101 GBEAN_INFO = infoFactory.getBeanInfo(); 102 103 } 104 105 public static GBeanInfo getGBeanInfo() { 106 return GBEAN_INFO; 107 } 108 } 109 | Popular Tags |