/** * Get the path for a dependency * * @param dependency The dependency * @return The path */ protected String getPath(DependencyType dependency) { String path = dependency.getOrganisation().replace('.', File.separatorChar) + File.separatorChar + dependency.getArtifact() + File.separatorChar + dependency.getRevision() + File.separatorChar + dependency.getArtifact() + "-" + dependency.getRevision() + "." + dependency.getExt(); return path; }
/** * Download an artifact * * @param servers The servers * @param protocolMap The protocols * @param dependency The dependency * @param repository The repository * @param tracker The dependency tracker * @return The list of dependencies downloaded * @exception ResolveException Thrown in case of an error */ protected List<DependencyType> downloadArtifact( List<ServerType> servers, Map<String, Protocol> protocolMap, DependencyType dependency, File repository, DependencyTracker tracker) throws ResolveException { if (tracker.isTracked(dependency)) return Collections.emptyList(); if (!tracker.track(dependency)) return Collections.emptyList(); List<DependencyType> result = getArtifact(repository, dependency); if (result != null) return result; result = new ArrayList<DependencyType>(1); File f = new File(repository, getPath(dependency)); if (!f.getParentFile().exists() && !f.getParentFile().mkdirs()) throw new ResolveException(f.getParent() + " couldn't be created"); Iterator<ServerType> it = servers.iterator(); while (result.isEmpty() && it.hasNext()) { try { ServerType server = it.next(); String path = server.getValue(); if (!path.endsWith("/")) path = path + "/"; path += Pattern.resolve( server.getPattern(), dependency.getOrganisation(), dependency.getModule(), dependency.getRevision(), dependency.getArtifact(), dependency.getClassifier(), dependency.getExt()); String protocolKey = server.getProtocol(); if (protocolKey == null || protocolKey.trim().equals("")) protocolKey = "http"; Protocol protocol = protocolMap.get(protocolKey); if (protocol != null) { Protocol copy = protocol.clone(); if (copy.download(path, f)) result.add(dependency); } else { throw new ResolveException( "Protocol (" + protocolKey + ") not defined for server " + server.getValue()); } } catch (CloneNotSupportedException cnse) { // Shouldn't happen } } if (result.isEmpty()) throw new ResolveException("The dependency couldn't be resolved", dependency); return result; }