1 6 package fr.jayasoft.ivy.resolver; 7 8 import java.util.ArrayList ; 9 import java.util.Collection ; 10 import java.util.Collections ; 11 import java.util.Date ; 12 import java.util.HashMap ; 13 import java.util.HashSet ; 14 import java.util.Iterator ; 15 import java.util.List ; 16 import java.util.ListIterator ; 17 import java.util.Map ; 18 19 import fr.jayasoft.ivy.Artifact; 20 import fr.jayasoft.ivy.DefaultArtifact; 21 import fr.jayasoft.ivy.DependencyDescriptor; 22 import fr.jayasoft.ivy.ModuleRevisionId; 23 import fr.jayasoft.ivy.ResolveData; 24 import fr.jayasoft.ivy.util.IvyPattern; 25 import fr.jayasoft.ivy.util.IvyPatternHelper; 26 import fr.jayasoft.ivy.util.Message; 27 28 32 public abstract class AbstractResourceResolver extends BasicResolver { 33 34 private static final Map IVY_ARTIFACT_ATTRIBUTES = new HashMap (); 35 static { 36 IVY_ARTIFACT_ATTRIBUTES.put(IvyPatternHelper.ARTIFACT_KEY, "ivy"); 37 IVY_ARTIFACT_ATTRIBUTES.put(IvyPatternHelper.TYPE_KEY, "ivy"); 38 IVY_ARTIFACT_ATTRIBUTES.put(IvyPatternHelper.EXT_KEY, "xml"); 39 } 40 41 private List _ivyPatterns = new ArrayList (); private List _artifactPatterns = new ArrayList (); private boolean _m2compatible = false; 44 45 46 public AbstractResourceResolver() { 47 } 48 49 protected ResolvedResource findIvyFileRef(DependencyDescriptor dd, ResolveData data) { 50 ModuleRevisionId mrid = dd.getDependencyRevisionId(); 51 if (isM2compatible()) { 52 mrid = convertM2IdForResourceSearch(mrid); 53 } 54 return findResourceUsingPatterns(mrid, _ivyPatterns, DefaultArtifact.newIvyArtifact(mrid, data.getDate()), getRMDParser(dd, data), data.getDate()); 55 } 56 57 protected ResolvedResource findArtifactRef(Artifact artifact, Date date) { 58 ModuleRevisionId mrid = artifact.getModuleRevisionId(); 59 if (isM2compatible()) { 60 mrid = convertM2IdForResourceSearch(mrid); 61 } 62 return findResourceUsingPatterns(mrid, _artifactPatterns, artifact, getDefaultRMDParser(artifact.getModuleRevisionId().getModuleId()), date); 63 } 64 65 protected ResolvedResource findResourceUsingPatterns(ModuleRevisionId moduleRevision, List patternList, Artifact artifact, ResourceMDParser rmdparser, Date date) { 66 ResolvedResource rres = null; 67 for (Iterator iter = patternList.iterator(); iter.hasNext() && rres == null;) { 68 String pattern = (String )iter.next(); 69 rres = findResourceUsingPattern(moduleRevision, pattern, artifact, rmdparser, date); 70 } 71 return rres; 72 } 73 74 protected abstract ResolvedResource findResourceUsingPattern(ModuleRevisionId mrid, String pattern, Artifact artifact, ResourceMDParser rmdparser, Date date); 75 76 82 protected void logIvyNotFound(ModuleRevisionId mrid) { 83 if (isM2compatible()) { 84 mrid = convertM2IdForResourceSearch(mrid); 85 } 86 Artifact artifact = DefaultArtifact.newIvyArtifact(mrid, null); 87 logMdNotFound(mrid, artifact); 88 } 89 90 protected void logMdNotFound(ModuleRevisionId mrid, Artifact artifact) { 91 String revisionToken = mrid.getRevision().startsWith("latest.")?"[any "+mrid.getRevision().substring("latest.".length())+"]":"["+mrid.getRevision()+"]"; 92 Artifact latestArtifact = new DefaultArtifact(ModuleRevisionId.newInstance(mrid, revisionToken), null, artifact.getName(), artifact.getType(), artifact.getExt(), artifact.getExtraAttributes()); 93 if (_ivyPatterns.isEmpty()) { 94 logIvyAttempt("no ivy pattern => no attempt to find module descriptor file for "+mrid); 95 } else { 96 for (Iterator iter = _ivyPatterns.iterator(); iter.hasNext();) { 97 String pattern = (String )iter.next(); 98 String resolvedFileName = IvyPatternHelper.substitute(pattern, artifact); 99 logIvyAttempt(resolvedFileName); 100 if (getIvy().getVersionMatcher().isDynamic(mrid)) { 101 resolvedFileName = IvyPatternHelper.substitute(pattern, latestArtifact); 102 logIvyAttempt(resolvedFileName); 103 } 104 } 105 } 106 } 107 108 114 protected void logArtifactNotFound(Artifact artifact) { 115 if (_artifactPatterns.isEmpty()) { 116 if (artifact.getUrl() == null) { 117 logArtifactAttempt(artifact, "no artifact pattern => no attempt to find artifact "+artifact); 118 } 119 } 120 Artifact used = artifact; 121 if (isM2compatible()) { 122 used = DefaultArtifact.cloneWithAnotherMrid(artifact, convertM2IdForResourceSearch(artifact.getModuleRevisionId())); 123 } 124 125 for (Iterator iter = _artifactPatterns.iterator(); iter.hasNext();) { 126 String pattern = (String )iter.next(); 127 String resolvedFileName = IvyPatternHelper.substitute(pattern, used); 128 logArtifactAttempt(artifact, resolvedFileName); 129 } 130 if (used.getUrl() != null) { 131 logArtifactAttempt(artifact, used.getUrl().toString()); 132 } 133 } 134 135 protected Collection findNames(Map tokenValues, String token) { 136 Collection names = new HashSet (); 137 names.addAll(findIvyNames(tokenValues, token)); 138 if (isAllownomd()) { 139 names.addAll(findArtifactNames(tokenValues, token)); 140 } 141 return names; 142 } 143 144 protected Collection findIvyNames(Map tokenValues, String token) { 145 Collection names = new HashSet (); 146 tokenValues = new HashMap (tokenValues); 147 tokenValues.put(IvyPatternHelper.ARTIFACT_KEY, "ivy"); 148 tokenValues.put(IvyPatternHelper.TYPE_KEY, "ivy"); 149 tokenValues.put(IvyPatternHelper.EXT_KEY, "xml"); 150 findTokenValues(names, getIvyPatterns(), tokenValues, token); 151 getIvy().filterIgnore(names); 152 return names; 153 } 154 155 protected Collection findArtifactNames(Map tokenValues, String token) { 156 Collection names = new HashSet (); 157 tokenValues = new HashMap (tokenValues); 158 tokenValues.put(IvyPatternHelper.ARTIFACT_KEY, tokenValues.get(IvyPatternHelper.MODULE_KEY)); 159 tokenValues.put(IvyPatternHelper.TYPE_KEY, "jar"); 160 tokenValues.put(IvyPatternHelper.EXT_KEY, "jar"); 161 findTokenValues(names, getArtifactPatterns(), tokenValues, token); 162 getIvy().filterIgnore(names); 163 return names; 164 } 165 166 protected void findTokenValues(Collection names, List patterns, Map tokenValues, String token) { 168 } 169 173 public void addIvyPattern(String pattern) { 174 _ivyPatterns.add(pattern); 175 } 176 177 public void addArtifactPattern(String pattern) { 178 _artifactPatterns.add(pattern); 179 } 180 181 public List getIvyPatterns() { 182 return Collections.unmodifiableList(_ivyPatterns); 183 } 184 185 public List getArtifactPatterns() { 186 return Collections.unmodifiableList(_artifactPatterns); 187 } 188 protected void setIvyPatterns(List ivyPatterns) { 189 _ivyPatterns = ivyPatterns; 190 } 191 protected void setArtifactPatterns(List artifactPatterns) { 192 _artifactPatterns = artifactPatterns; 193 } 194 195 198 public void addConfiguredIvy(IvyPattern p) { 199 _ivyPatterns.add(p.getPattern()); 200 } 201 202 public void addConfiguredArtifact(IvyPattern p) { 203 _artifactPatterns.add(p.getPattern()); 204 } 205 206 public void dumpConfig() { 207 super.dumpConfig(); 208 Message.debug("\t\tm2compatible: "+isM2compatible()); 209 Message.debug("\t\tivy patterns:"); 210 for (ListIterator iter = getIvyPatterns().listIterator(); iter.hasNext();) { 211 String p = (String )iter.next(); 212 Message.debug("\t\t\t"+p); 213 } 214 Message.debug("\t\tartifact patterns:"); 215 for (ListIterator iter = getArtifactPatterns().listIterator(); iter.hasNext();) { 216 String p = (String )iter.next(); 217 Message.debug("\t\t\t"+p); 218 } 219 } 220 221 public boolean isM2compatible() { 222 return _m2compatible; 223 } 224 225 public void setM2compatible(boolean m2compatible) { 226 _m2compatible = m2compatible; 227 } 228 229 protected ModuleRevisionId convertM2IdForResourceSearch(ModuleRevisionId mrid) { 230 if (mrid.getOrganisation().indexOf('.') == -1) { 231 return mrid; 232 } 233 return ModuleRevisionId.newInstance(mrid.getOrganisation().replace('.', '/'), mrid.getName(), mrid.getBranch(), mrid.getRevision(), mrid.getExtraAttributes()); 234 } 235 236 } 237 | Popular Tags |