KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > resolver > AbstractResourceResolver


1 /*
2  * This file is subject to the license found in LICENCE.TXT in the root directory of the project.
3  *
4  * #SNAPSHOT#
5  */

6 package fr.jayasoft.ivy.resolver;
7
8 import java.util.ArrayList JavaDoc;
9 import java.util.Collection JavaDoc;
10 import java.util.Collections JavaDoc;
11 import java.util.Date JavaDoc;
12 import java.util.HashMap JavaDoc;
13 import java.util.HashSet JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import java.util.List JavaDoc;
16 import java.util.ListIterator JavaDoc;
17 import java.util.Map JavaDoc;
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 /**
29  * @author Xavier Hanin
30  *
31  */

32 public abstract class AbstractResourceResolver extends BasicResolver {
33     
34     private static final Map JavaDoc IVY_ARTIFACT_ATTRIBUTES = new HashMap JavaDoc();
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 JavaDoc _ivyPatterns = new ArrayList JavaDoc(); // List (String pattern)
42
private List JavaDoc _artifactPatterns = new ArrayList JavaDoc(); // List (String pattern)
43
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 JavaDoc 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 JavaDoc patternList, Artifact artifact, ResourceMDParser rmdparser, Date JavaDoc date) {
66         ResolvedResource rres = null;
67         for (Iterator JavaDoc iter = patternList.iterator(); iter.hasNext() && rres == null;) {
68             String JavaDoc pattern = (String JavaDoc)iter.next();
69             rres = findResourceUsingPattern(moduleRevision, pattern, artifact, rmdparser, date);
70         }
71         return rres;
72     }
73     
74     protected abstract ResolvedResource findResourceUsingPattern(ModuleRevisionId mrid, String JavaDoc pattern, Artifact artifact, ResourceMDParser rmdparser, Date JavaDoc date);
75
76     /**
77      * Output message to log indicating what have been done to look for an artifact which
78      * has finally not been found
79      *
80      * @param artifact the artifact which has not been found
81      */

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 JavaDoc 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 JavaDoc iter = _ivyPatterns.iterator(); iter.hasNext();) {
97                 String JavaDoc pattern = (String JavaDoc)iter.next();
98                 String JavaDoc 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     /**
109      * Output message to log indicating what have been done to look for an artifact which
110      * has finally not been found
111      *
112      * @param artifact the artifact which has not been found
113      */

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 JavaDoc iter = _artifactPatterns.iterator(); iter.hasNext();) {
126             String JavaDoc pattern = (String JavaDoc)iter.next();
127             String JavaDoc 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 JavaDoc findNames(Map JavaDoc tokenValues, String JavaDoc token) {
136         Collection JavaDoc names = new HashSet JavaDoc();
137         names.addAll(findIvyNames(tokenValues, token));
138         if (isAllownomd()) {
139             names.addAll(findArtifactNames(tokenValues, token));
140         }
141         return names;
142     }
143
144     protected Collection JavaDoc findIvyNames(Map JavaDoc tokenValues, String JavaDoc token) {
145         Collection JavaDoc names = new HashSet JavaDoc();
146         tokenValues = new HashMap JavaDoc(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 JavaDoc findArtifactNames(Map JavaDoc tokenValues, String JavaDoc token) {
156         Collection JavaDoc names = new HashSet JavaDoc();
157         tokenValues = new HashMap JavaDoc(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     // should be overridden by subclasses wanting to have listing features
167
protected void findTokenValues(Collection JavaDoc names, List JavaDoc patterns, Map JavaDoc tokenValues, String JavaDoc token) {
168     }
169     /**
170      * example of pattern : ~/Workspace/[module]/[module].ivy.xml
171      * @param pattern
172      */

173     public void addIvyPattern(String JavaDoc pattern) {
174         _ivyPatterns.add(pattern);
175     }
176
177     public void addArtifactPattern(String JavaDoc pattern) {
178         _artifactPatterns.add(pattern);
179     }
180     
181     public List JavaDoc getIvyPatterns() {
182         return Collections.unmodifiableList(_ivyPatterns);
183     }
184
185     public List JavaDoc getArtifactPatterns() {
186         return Collections.unmodifiableList(_artifactPatterns);
187     }
188     protected void setIvyPatterns(List JavaDoc ivyPatterns) {
189         _ivyPatterns = ivyPatterns;
190     }
191     protected void setArtifactPatterns(List JavaDoc artifactPatterns) {
192         _artifactPatterns = artifactPatterns;
193     }
194
195     /*
196      * Methods respecting ivy conf method specifications
197      */

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 JavaDoc iter = getIvyPatterns().listIterator(); iter.hasNext();) {
211             String JavaDoc p = (String JavaDoc)iter.next();
212             Message.debug("\t\t\t"+p);
213         }
214         Message.debug("\t\tartifact patterns:");
215         for (ListIterator JavaDoc iter = getArtifactPatterns().listIterator(); iter.hasNext();) {
216             String JavaDoc p = (String JavaDoc)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