1 6 package fr.jayasoft.ivy; 7 8 import java.io.File ; 9 import java.io.IOException ; 10 import java.text.ParseException ; 11 import java.util.ArrayList ; 12 import java.util.Arrays ; 13 import java.util.Collection ; 14 import java.util.Date ; 15 import java.util.HashMap ; 16 import java.util.Iterator ; 17 import java.util.LinkedHashMap ; 18 import java.util.LinkedHashSet ; 19 import java.util.List ; 20 import java.util.Map ; 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 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 [] 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 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 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 _status = StatusManager.getCurrent().getDefaultStatus(); 146 private Date _publicationDate; 147 private Date _resolvedPublicationDate; 148 private List _dependencies = new ArrayList (); 149 private Map _configurations = new LinkedHashMap (); private Map _artifactsByConf = new HashMap (); private Collection _artifacts = new LinkedHashSet (); private boolean _isDefault = false; 153 private Map _conflictManagers = new LinkedHashMap (); private List _licenses = new ArrayList (); private String _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 status, Date pubDate) { 163 this(id, status, pubDate, false); 164 } 165 166 public DefaultModuleDescriptor(ModuleRevisionId id, String status, Date pubDate, boolean isDefault) { 167 if (id == null) { 168 throw new NullPointerException ("null module revision id not allowed"); 169 } 170 if (status == null) { 171 throw new NullPointerException ("null status not allowed"); 172 } 173 _revId = id; 174 _resolvedRevId = id; 175 _status = status; 176 _publicationDate = pubDate; 177 _resolvedPublicationDate = _publicationDate==null?new Date ():_publicationDate; 178 _isDefault = isDefault; 179 } 180 181 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 publicationDate) { 196 _publicationDate = publicationDate; 197 if (_resolvedPublicationDate == null) { 198 _resolvedPublicationDate = _publicationDate==null?new Date ():_publicationDate; 199 } 200 } 201 public Date getPublicationDate() { 202 return _publicationDate; 203 } 204 public void setResolvedPublicationDate(Date publicationDate) { 205 if (publicationDate == null) { 206 throw new NullPointerException ("null publication date not allowed"); 207 } 208 _resolvedPublicationDate = publicationDate; 209 } 210 public Date getResolvedPublicationDate() { 211 return _resolvedPublicationDate; 212 } 213 214 public void setModuleRevisionId(ModuleRevisionId revId) { 215 if (revId == null) { 216 throw new NullPointerException ("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 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 246 public void addArtifact(String conf, Artifact artifact) { 247 Collection artifacts = (Collection )_artifactsByConf.get(conf); 248 if (artifacts == null) { 249 artifacts = new ArrayList (); 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 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 [] getConfigurationsNames() { 273 return (String [])_configurations.keySet().toArray(new String [_configurations.size()]); 274 } 275 276 public String [] getPublicConfigurationsNames() { 277 List ret = new ArrayList (); 278 for (Iterator 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 [])ret.toArray(new String [ret.size()]); 285 } 286 287 291 public Configuration getConfiguration(String confName) { 292 return (Configuration)_configurations.get(confName); 293 } 294 295 public Artifact[] getArtifacts(String conf) { 296 Collection artifacts = (Collection )_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 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 destFile) throws ParseException , IOException { 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 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 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 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 getHomePage() { 382 return _homePage; 383 } 384 385 386 public void setHomePage(String 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 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 424 public void check() { 425 for (Iterator iter = _configurations.values().iterator(); iter.hasNext();) { 426 Configuration conf = (Configuration)iter.next(); 427 String [] ext = conf.getExtends(); 428 for (int i = 0; i < ext.length; i++) { 429 if (!_configurations.containsKey(ext[i].trim())) { 430 throw new IllegalStateException ("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 getAttribute(String attName) { 445 return _resolvedRevId.getAttribute(attName); 446 } 447 448 public Map getAttributes() { 449 return _resolvedRevId.getAttributes(); 450 } 451 452 public String getExtraAttribute(String attName) { 453 return _resolvedRevId.getExtraAttribute(attName); 454 } 455 456 public Map getExtraAttributes() { 457 return _resolvedRevId.getExtraAttributes(); 458 } 459 460 public String getStandardAttribute(String attName) { 461 return _resolvedRevId.getStandardAttribute(attName); 462 } 463 464 public Map 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 |