in nbm-maven-plugin/src/main/java/org/apache/netbeans/nbm/CreateClusterAppMojo.java [766:823]
private void externalDownload(File f, InputStream is) throws IOException {
// Cf. org.netbeans.nbbuild.AutoUpdate
BufferedReader r = new BufferedReader(new InputStreamReader(is, "UTF-8"));
long crc = -1;
long size = -1;
boolean found = false;
String line;
while ((line = r.readLine()) != null) {
if (line.startsWith("CRC:")) {
crc = Long.parseLong(line.substring(4).trim());
} else if (line.startsWith("URL:")) {
String rest = line.substring(4).trim();
if (rest.startsWith("m2:/")) {
if (!found) {
String[] coords = rest.substring(4).trim().split(":");
Artifact artifact;
if (coords.length == 4) {
artifact = artifactFactory.
createArtifact(coords[0], coords[1], coords[2], null, coords[3]);
} else {
artifact = artifactFactory.createArtifactWithClassifier(coords[0], coords[1], coords[2],
coords[3], coords[4]);
}
try {
artifactResolver.
resolve(artifact, project.getRemoteArtifactRepositories(), session.getLocalRepository());
FileUtils.copyFile(artifact.getFile(), f);
found = true;
} catch (AbstractArtifactResolutionException x) {
getLog().warn("Cannot find " + line.substring(8), x);
}
}
} else if (!found) {
String url = line.substring(4).trim();
try {
// XXX use Wagon API instead
FileUtils.copyURLToFile(new URL(url), f);
found = true;
} catch (IOException x) {
getLog().warn("Cannot download " + url, x);
}
}
} else if (line.startsWith("SIZE:")) {
size = Long.parseLong(line.substring(5).trim());
} else {
getLog().warn("Unrecognized line: " + line);
}
}
if (!found) {
throw new IOException("Could not download " + f);
}
if (crc != -1 && crc != crcForFile(f).getValue()) {
throw new IOException("CRC-32 of " + f + " does not match declared " + crc);
}
if (size != -1 && size != f.length()) {
throw new IOException("Size of " + f + " does not match declared " + size);
}
}