KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > DefaultModuleDescriptor


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;
7
8 import java.io.File JavaDoc;
9 import java.io.IOException JavaDoc;
10 import java.text.ParseException JavaDoc;
11 import java.util.ArrayList JavaDoc;
12 import java.util.Arrays JavaDoc;
13 import java.util.Collection JavaDoc;
14 import java.util.Date JavaDoc;
15 import java.util.HashMap JavaDoc;
16 import java.util.Iterator JavaDoc;
17 import java.util.LinkedHashMap JavaDoc;
18 import java.util.LinkedHashSet JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Map JavaDoc;
21
22 import fr.jayasoft.ivy.matcher.MatcherHelper;
23 import fr.jayasoft.ivy.matcher.PatternMatcher;
24 import fr.jayasoft.ivy.namespace.NameSpaceHelper;
25 import fr.jayasoft.ivy.namespace.Namespace;
26 import fr.jayasoft.ivy.namespace.NamespaceTransformer;
27 import fr.jayasoft.ivy.parser.ModuleDescriptorParser;
28 import fr.jayasoft.ivy.repository.Resource;
29 import fr.jayasoft.ivy.status.StatusManager;
30 import fr.jayasoft.ivy.util.Message;
31 import fr.jayasoft.ivy.version.VersionMatcher;
32 import fr.jayasoft.ivy.xml.XmlModuleDescriptorWriter;
33
34 /**
35  * @author X.Hanin
36  *
37  */

38 public class DefaultModuleDescriptor implements ModuleDescriptor {
39     
40     public static DefaultModuleDescriptor newDefaultInstance(ModuleRevisionId mrid) {
41         return newDefaultInstance(mrid, null);
42     }
43     
44     public static DefaultModuleDescriptor newCallerInstance(ModuleRevisionId mrid, String JavaDoc[] confs, boolean transitive, boolean changing) {
45         DefaultModuleDescriptor moduleDescriptor = new DefaultModuleDescriptor(ModuleRevisionId.newInstance(mrid.getOrganisation(), mrid.getName()+"-caller", "working"), "integration", null, true);
46         for (int i = 0; i < confs.length; i++) {
47             moduleDescriptor.addConfiguration(new Configuration(confs[i]));
48         }
49         moduleDescriptor.setLastModified(System.currentTimeMillis());
50             DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(moduleDescriptor, mrid, true, changing, transitive);
51             for (int j = 0; j < confs.length; j++) {
52                 dd.addDependencyConfiguration(confs[j], confs[j]);
53             }
54             moduleDescriptor.addDependency(dd);
55         
56         return moduleDescriptor;
57     }
58     
59     public static DefaultModuleDescriptor newCallerInstance(ModuleRevisionId[] mrid, boolean transitive, boolean changing) {
60         DefaultModuleDescriptor moduleDescriptor = new DefaultModuleDescriptor(ModuleRevisionId.newInstance("caller", "all-caller", "working"), "integration", null, true);
61         moduleDescriptor.addConfiguration(new Configuration(DEFAULT_CONFIGURATION));
62         moduleDescriptor.setLastModified(System.currentTimeMillis());
63         for (int i = 0; i < mrid.length; i++) {
64             DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(moduleDescriptor, mrid[i], true, changing, transitive);
65             dd.addDependencyConfiguration(DEFAULT_CONFIGURATION, "*");
66             moduleDescriptor.addDependency(dd);
67         }
68         
69         return moduleDescriptor;
70     }
71     
72     public static DefaultModuleDescriptor newDefaultInstance(ModuleRevisionId mrid, DependencyArtifactDescriptor[] artifacts) {
73         DefaultModuleDescriptor moduleDescriptor = new DefaultModuleDescriptor(mrid, "release", null, true);
74         moduleDescriptor.addConfiguration(new Configuration(DEFAULT_CONFIGURATION));
75         if (artifacts != null && artifacts.length > 0) {
76             for (int i = 0; i < artifacts.length; i++) {
77                 moduleDescriptor.addArtifact(DEFAULT_CONFIGURATION, new MDArtifact(moduleDescriptor, artifacts[i].getName(), artifacts[i].getType(), artifacts[i].getExt(), artifacts[i].getUrl(), null));
78             }
79         } else {
80             moduleDescriptor.addArtifact(DEFAULT_CONFIGURATION, new MDArtifact(moduleDescriptor, mrid.getName(), "jar", "jar"));
81         }
82         moduleDescriptor.setLastModified(System.currentTimeMillis());
83         return moduleDescriptor;
84     }
85
86     public static DefaultModuleDescriptor newBasicInstance(ModuleRevisionId mrid, Date JavaDoc publicationDate) {
87         DefaultModuleDescriptor moduleDescriptor = new DefaultModuleDescriptor(mrid, "release", publicationDate, false);
88         moduleDescriptor.addConfiguration(new Configuration(DEFAULT_CONFIGURATION));
89         moduleDescriptor.addArtifact(DEFAULT_CONFIGURATION, new MDArtifact(moduleDescriptor, mrid.getName(), "jar", "jar"));
90         return moduleDescriptor;
91     }
92
93     /**
94      * Transforms the given module descriptor of the given namespace and return
95      * a new module descriptor in the system namespace.
96      *
97      * <i>Note that dependency exclude rules are not converted in system namespace, because they aren't
98      * transformable (the name space hasn't the ability to convert regular expressions)</i>
99      *
100      * @param md
101      * @param ns
102      * @return
103      */

104     public static ModuleDescriptor transformInstance(ModuleDescriptor md, Namespace ns) {
105         NamespaceTransformer t = ns.getToSystemTransformer();
106         if (t.isIdentity()) {
107             return md;
108         }
109         DefaultModuleDescriptor nmd = new DefaultModuleDescriptor(md.getParser(), md.getResource());
110         nmd._revId = t.transform(md.getModuleRevisionId());
111         nmd._resolvedRevId = t.transform(md.getResolvedModuleRevisionId());
112         nmd._status = md.getStatus();
113         nmd._publicationDate = md.getPublicationDate();
114         nmd._resolvedPublicationDate = md.getResolvedPublicationDate();
115         DependencyDescriptor[] dd = md.getDependencies();
116         for (int i = 0; i < dd.length; i++) {
117             nmd._dependencies.add(NameSpaceHelper.toSystem(dd[i], ns));
118         }
119         Configuration[] confs = md.getConfigurations();
120         for (int i = 0; i < confs.length; i++) {
121             nmd._configurations.put(confs[i].getName(), confs[i]);
122             Artifact[] arts = md.getArtifacts(confs[i].getName());
123             for (int j = 0; j < arts.length; j++) {
124                 nmd.addArtifact(confs[i].getName(), NameSpaceHelper.transform(arts[j], t));
125             }
126         }
127         nmd.setDefault(md.isDefault());
128         if (md instanceof DefaultModuleDescriptor) {
129             DefaultModuleDescriptor dmd = (DefaultModuleDescriptor)md;
130             nmd._conflictManagers.putAll(dmd._conflictManagers);
131         } else {
132             Message.warn("transformed module descriptor is not a default module descriptor: impossible to copy conflict manager configuration: "+md);
133         }
134         nmd._licenses.addAll(Arrays.asList(md.getLicenses()));
135         nmd._homePage = md.getHomePage();
136         nmd._lastModified = md.getLastModified();
137         nmd._namespace = ns;
138         
139         return nmd;
140     }
141     
142
143     private ModuleRevisionId _revId;
144     private ModuleRevisionId _resolvedRevId;
145     private String JavaDoc _status = StatusManager.getCurrent().getDefaultStatus();
146     private Date JavaDoc _publicationDate;
147     private Date JavaDoc _resolvedPublicationDate;
148     private List JavaDoc _dependencies = new ArrayList JavaDoc();
149     private Map JavaDoc _configurations = new LinkedHashMap JavaDoc(); // Map(String conf -> Configuration)
150
private Map JavaDoc _artifactsByConf = new HashMap JavaDoc(); // Map (String conf -> Collection(Artifact))
151
private Collection JavaDoc _artifacts = new LinkedHashSet JavaDoc(); // Collection(Artifact) // all artifacts could also be found in the artifactsByConf map, but here we can preserve the order
152
private boolean _isDefault = false;
153     private Map JavaDoc _conflictManagers = new LinkedHashMap JavaDoc(); // Map (ModuleId -> )
154
private List JavaDoc _licenses = new ArrayList JavaDoc(); // List(License)
155
private String JavaDoc _homePage;
156     private long _lastModified = 0;
157     private Namespace _namespace;
158     private boolean _mappingOverride;
159     private ModuleDescriptorParser _parser;
160     private Resource _resource;
161
162     public DefaultModuleDescriptor(ModuleRevisionId id, String JavaDoc status, Date JavaDoc pubDate) {
163         this(id, status, pubDate, false);
164     }
165     
166     public DefaultModuleDescriptor(ModuleRevisionId id, String JavaDoc status, Date JavaDoc pubDate, boolean isDefault) {
167         if (id == null) {
168             throw new NullPointerException JavaDoc("null module revision id not allowed");
169         }
170         if (status == null) {
171             throw new NullPointerException JavaDoc("null status not allowed");
172         }
173         _revId = id;
174         _resolvedRevId = id;
175         _status = status;
176         _publicationDate = pubDate;
177         _resolvedPublicationDate = _publicationDate==null?new Date JavaDoc():_publicationDate;
178         _isDefault = isDefault;
179     }
180     
181     /**
182      * IMPORTANT : at least call setModuleRevisionId and setResolvedPublicationDate
183      * with instances created by this constructor !
184      *
185      */

186     public DefaultModuleDescriptor(ModuleDescriptorParser parser, Resource res) {
187         _parser = parser;
188         _resource = res;
189     }
190
191     public boolean isDefault() {
192         return _isDefault;
193     }
194     
195     public void setPublicationDate(Date JavaDoc publicationDate) {
196         _publicationDate = publicationDate;
197         if (_resolvedPublicationDate == null) {
198             _resolvedPublicationDate = _publicationDate==null?new Date JavaDoc():_publicationDate;
199         }
200     }
201     public Date JavaDoc getPublicationDate() {
202         return _publicationDate;
203     }
204     public void setResolvedPublicationDate(Date JavaDoc publicationDate) {
205         if (publicationDate == null) {
206             throw new NullPointerException JavaDoc("null publication date not allowed");
207         }
208         _resolvedPublicationDate = publicationDate;
209     }
210     public Date JavaDoc getResolvedPublicationDate() {
211         return _resolvedPublicationDate;
212     }
213     
214     public void setModuleRevisionId(ModuleRevisionId revId) {
215         if (revId == null) {
216             throw new NullPointerException JavaDoc("null module revision id not allowed");
217         }
218         _revId = revId;
219         if (_resolvedRevId == null) {
220             _resolvedRevId = _revId;
221         }
222     }
223
224     public void setResolvedModuleRevisionId(ModuleRevisionId revId) {
225         _resolvedRevId = revId;
226     }
227
228     public void setStatus(String JavaDoc status) {
229         _status = status;
230     }
231
232     public void addDependency(DependencyDescriptor dependency) {
233         _dependencies.add(dependency);
234     }
235     
236     public void addConfiguration(Configuration conf) {
237         _configurations.put(conf.getName(), conf);
238     }
239     
240     /**
241      * Artifact configurations are not used since added artifact may not be
242      * entirely completed, so its configurations data may not be accurate
243      * @param conf
244      * @param artifact
245      */

246     public void addArtifact(String JavaDoc conf, Artifact artifact) {
247         Collection JavaDoc artifacts = (Collection JavaDoc)_artifactsByConf.get(conf);
248         if (artifacts == null) {
249             artifacts = new ArrayList JavaDoc();
250             _artifactsByConf.put(conf, artifacts);
251         }
252         artifacts.add(artifact);
253         _artifacts.add(artifact);
254     }
255     
256     public ModuleRevisionId getModuleRevisionId() {
257         return _revId;
258     }
259
260     public ModuleRevisionId getResolvedModuleRevisionId() {
261         return _resolvedRevId;
262     }
263
264     public String JavaDoc getStatus() {
265         return _status;
266     }
267
268     public Configuration[] getConfigurations() {
269         return (Configuration[])_configurations.values().toArray(new Configuration[_configurations.size()]);
270     }
271     
272     public String JavaDoc[] getConfigurationsNames() {
273         return (String JavaDoc[])_configurations.keySet().toArray(new String JavaDoc[_configurations.size()]);
274     }
275     
276     public String JavaDoc[] getPublicConfigurationsNames() {
277         List JavaDoc ret = new ArrayList JavaDoc();
278         for (Iterator JavaDoc iter = _configurations.values().iterator(); iter.hasNext();) {
279             Configuration conf = (Configuration)iter.next();
280             if (conf.getVisibility() == Configuration.Visibility.PUBLIC) {
281                 ret.add(conf.getName());
282             }
283         }
284         return (String JavaDoc[])ret.toArray(new String JavaDoc[ret.size()]);
285     }
286     
287     /**
288      * Returns the configuration object with the given name in the current module descriptor, null
289      * if not found.
290      */

291     public Configuration getConfiguration(String JavaDoc confName) {
292         return (Configuration)_configurations.get(confName);
293     }
294
295     public Artifact[] getArtifacts(String JavaDoc conf) {
296         Collection JavaDoc artifacts = (Collection JavaDoc)_artifactsByConf.get(conf);
297         if (artifacts == null) {
298             return new Artifact[0];
299         } else {
300             return (Artifact[])artifacts.toArray(new Artifact[artifacts.size()]);
301         }
302     }
303     public Artifact[] getAllArtifacts() {
304         return (Artifact[])_artifacts.toArray(new Artifact[_artifacts.size()]);
305     }
306     public DependencyDescriptor[] getDependencies() {
307         return (DependencyDescriptor[])_dependencies.toArray(new DependencyDescriptor[_dependencies.size()]);
308     }
309     
310     public boolean dependsOn(VersionMatcher matcher, ModuleDescriptor md) {
311         for (Iterator JavaDoc iter = _dependencies.iterator(); iter.hasNext();) {
312             DependencyDescriptor dd = (DependencyDescriptor)iter.next();
313             if (dd.getDependencyId().equals(md.getModuleRevisionId().getModuleId())) {
314                 if (md.getResolvedModuleRevisionId().getRevision() == null) {
315                     return true;
316                 } else if (matcher.accept(dd.getDependencyRevisionId(), md)) {
317                     return true;
318                 }
319             }
320         }
321         return false;
322     }
323     
324     public void toIvyFile(File JavaDoc destFile) throws ParseException JavaDoc, IOException JavaDoc {
325         if (_parser != null && _resource != null) {
326             _parser.toIvyFile(_resource.openStream(), _resource, destFile, this);
327         } else {
328             XmlModuleDescriptorWriter.write(this, destFile);
329         }
330     }
331
332     public String JavaDoc toString() {
333         return "module: "+_revId+" status="+_status+" publication="+_publicationDate+" configurations="+_configurations+" artifacts="+_artifactsByConf+" dependencies="+_dependencies;
334     }
335
336     public void setDefault(boolean b) {
337         _isDefault = b;
338     }
339     
340     private static class ModuleIdMatcher {
341         private PatternMatcher _matcher;
342         private ModuleId _mid;
343         public ModuleIdMatcher(PatternMatcher matcher, ModuleId mid) {
344             _matcher = matcher;
345             _mid = mid;
346         }
347         public boolean matches(ModuleId mid) {
348             return MatcherHelper.matches(_matcher, _mid, mid);
349         }
350     }
351
352     /**
353      * regular expressions as explained in Pattern class may be used in ModuleId
354      * organisation and name
355      *
356      * @param moduleId
357      * @param matcher
358      * @param resolverName
359      */

360     public void addConflictManager(ModuleId moduleId, PatternMatcher matcher, ConflictManager manager) {
361         _conflictManagers.put(new ModuleIdMatcher(matcher, moduleId), manager);
362     }
363     public ConflictManager getConflictManager(ModuleId moduleId) {
364         for (Iterator JavaDoc iter = _conflictManagers.keySet().iterator(); iter.hasNext();) {
365             ModuleIdMatcher matcher = (ModuleIdMatcher)iter.next();
366             if (matcher.matches(moduleId)) {
367                 return (ConflictManager)_conflictManagers.get(matcher);
368             }
369         }
370         return null;
371     }
372     
373     public void addLicense(License license) {
374         _licenses.add(license);
375     }
376
377     public License[] getLicenses() {
378         return (License[])_licenses.toArray(new License[_licenses.size()]);
379     }
380
381     public String JavaDoc getHomePage() {
382         return _homePage;
383     }
384     
385
386     public void setHomePage(String JavaDoc homePage) {
387         _homePage = homePage;
388     }
389
390     public long getLastModified() {
391         return _lastModified;
392     }
393     
394
395     public void setLastModified(long lastModified) {
396         _lastModified = lastModified;
397     }
398
399     public Namespace getNamespace() {
400         if (_namespace == null || !isNamespaceUseful()) {
401             return null;
402         }
403         return _namespace;
404     }
405
406     public boolean isNamespaceUseful() {
407         for (Iterator JavaDoc iter = _dependencies.iterator(); iter.hasNext();) {
408             DependencyDescriptor dd = (DependencyDescriptor)iter.next();
409             if (dd.getAllDependencyArtifactsExcludes().length > 0) {
410                 return true;
411             }
412         }
413         return false;
414     }
415
416     public void setNamespace(Namespace ns) {
417         _namespace = ns;
418     }
419
420     /**
421      * Throws an exception if the module descriptor is inconsistent
422      * For the moment, only extended configurations existence is checked
423      */

424     public void check() {
425         for (Iterator JavaDoc iter = _configurations.values().iterator(); iter.hasNext();) {
426             Configuration conf = (Configuration)iter.next();
427             String JavaDoc[] ext = conf.getExtends();
428             for (int i = 0; i < ext.length; i++) {
429                 if (!_configurations.containsKey(ext[i].trim())) {
430                     throw new IllegalStateException JavaDoc("unknown configuration '"+ext[i]+"'. It is extended by "+conf.getName());
431                 }
432             }
433         }
434     }
435
436     public void setMappingOverride(boolean override) {
437         _mappingOverride = override;
438     }
439     
440     public boolean isMappingOverride() {
441         return _mappingOverride;
442     }
443
444     public String JavaDoc getAttribute(String JavaDoc attName) {
445         return _resolvedRevId.getAttribute(attName);
446     }
447
448     public Map JavaDoc getAttributes() {
449         return _resolvedRevId.getAttributes();
450     }
451
452     public String JavaDoc getExtraAttribute(String JavaDoc attName) {
453         return _resolvedRevId.getExtraAttribute(attName);
454     }
455
456     public Map JavaDoc getExtraAttributes() {
457         return _resolvedRevId.getExtraAttributes();
458     }
459
460     public String JavaDoc getStandardAttribute(String JavaDoc attName) {
461         return _resolvedRevId.getStandardAttribute(attName);
462     }
463
464     public Map JavaDoc getStandardAttributes() {
465         return _resolvedRevId.getStandardAttributes();
466     }
467
468     public ModuleDescriptorParser getParser() {
469         return _parser;
470     }
471
472     public Resource getResource() {
473         return _resource;
474     }
475
476 }
477
Popular Tags