package aQute.maven.provider;
import java.io.File;
import java.util.Properties;
import aQute.bnd.version.MavenVersion;
import aQute.lib.io.IO;
import aQute.maven.api.Archive;
import aQute.maven.api.Revision;
import aQute.maven.provider.MetadataParser.RevisionMetadata;
import aQute.maven.provider.MetadataParser.SnapshotVersion;
public class SnapshotReleaser extends Releaser {
private MavenVersion snapshotVersion;
private String build;
private String dateStamp;
private RevisionMetadata revisionMetadata;
public SnapshotReleaser(MavenRepository home, Revision revision, MavenBackingRepository snapshot,
Properties context) throws Exception {
super(home, revision, snapshot, context);
revisionMetadata = localOnly || repo == null ? new RevisionMetadata() : repo.getMetadata(revision);
force();
assert revision.isSnapshot();
setBuild(0, null);
}
@Override
protected void check() {}
@Override
public void setBuild(long timestamp, String build) {
timestamp = timestamp == 0 ? System.currentTimeMillis() : timestamp;
if (build == null) {
build = nextBuildNumber();
}
this.build = build;
snapshotVersion = revision.version.toSnapshot(timestamp, build);
dateStamp = MavenVersion.toDateStamp(timestamp);
}
private String nextBuildNumber() {
try {
return "" + (Integer.parseInt(revisionMetadata.snapshot.buildNumber) + 1);
} catch (Exception e) {
return "1";
}
}
public void updateMetadata() throws Exception {
revisionMetadata.group = revision.group;
revisionMetadata.artifact = revision.artifact;
revisionMetadata.version = revision.version;
revisionMetadata.lastUpdated = programMetadata.lastUpdated;
revisionMetadata.snapshot.buildNumber = build;
revisionMetadata.snapshot.timestamp = dateStamp;
for (Archive archive : upload) {
SnapshotVersion snapshotVersion = new SnapshotVersion();
snapshotVersion.extension = archive.extension;
snapshotVersion.classifier = archive.classifier.isEmpty() ? null : archive.classifier;
snapshotVersion.updated = programMetadata.lastUpdated;
snapshotVersion.value = this.snapshotVersion;
revisionMetadata.snapshotVersions.add(snapshotVersion);
}
File metafile = home.toLocalFile(revision.metadata(repo.id));
IO.mkdirs(metafile.getParentFile());
IO.store(revisionMetadata.toString(), metafile);
repo.store(metafile, revision.metadata());
super.updateMetadata();
}
protected Archive resolve(Archive archive) throws Exception {
Archive resolved = archive.resolveSnapshot(snapshotVersion);
return resolved;
}
protected boolean isUpdateProgramMetadata() {
return true;
}
public void sign(Archive archive, File f) throws Exception {}
}