use of org.commonjava.atlas.maven.ident.ref.TypeAndClassifier in project indy by Commonjava.
the class MavenMetadataGenerator method writeSnapshotMetadata.
/**
* First level will contain files that have the timestamp-buildNumber version suffix, e.g., 'o11yphant-metrics-api-1.0-20200805.065728-1.pom'
* we need to parse each this info and add them to snapshot versions.
*/
private boolean writeSnapshotMetadata(final ArtifactPathInfo info, final List<StoreResource> firstLevelFiles, final ArtifactStore store, final String path, final EventMetadata eventMetadata) throws IndyWorkflowException {
final Map<SnapshotPart, Set<ArtifactPathInfo>> infosBySnap = new HashMap<>();
for (final StoreResource resource : firstLevelFiles) {
final ArtifactPathInfo resInfo = ArtifactPathInfo.parse(resource.getPath());
if (resInfo != null) {
final SnapshotPart snap = resInfo.getSnapshotInfo();
Set<ArtifactPathInfo> infos = infosBySnap.computeIfAbsent(snap, k -> new HashSet<>());
infos.add(resInfo);
}
}
if (infosBySnap.isEmpty()) {
return false;
}
final List<SnapshotPart> snaps = new ArrayList<>(infosBySnap.keySet());
Collections.sort(snaps);
final Transfer metadataFile = fileManager.getTransfer(store, path);
OutputStream stream = null;
try {
final Document doc = xml.newDocumentBuilder().newDocument();
final Map<String, String> coordMap = new HashMap<>();
coordMap.put(ARTIFACT_ID, info.getArtifactId());
coordMap.put(GROUP_ID, info.getGroupId());
coordMap.put(VERSION, info.getReleaseVersion() + LOCAL_SNAPSHOT_VERSION_PART);
doc.appendChild(doc.createElementNS(doc.getNamespaceURI(), "metadata"));
xml.createElement(doc.getDocumentElement(), null, coordMap);
// the last one is the most recent
SnapshotPart snap = snaps.get(snaps.size() - 1);
Map<String, String> snapMap = new HashMap<>();
if (snap.isLocalSnapshot()) {
snapMap.put(LOCAL_COPY, Boolean.TRUE.toString());
} else {
snapMap.put(TIMESTAMP, SnapshotUtils.generateSnapshotTimestamp(snap.getTimestamp()));
snapMap.put(BUILD_NUMBER, Integer.toString(snap.getBuildNumber()));
}
final Date currentTimestamp = getCurrentTimestamp();
final String lastUpdated = getUpdateTimestamp(snap, currentTimestamp);
xml.createElement(doc, "versioning", Collections.singletonMap(LAST_UPDATED, lastUpdated));
xml.createElement(doc, "versioning/snapshot", snapMap);
for (SnapshotPart snap1 : snaps) {
final Set<ArtifactPathInfo> infos = infosBySnap.get(snap1);
for (final ArtifactPathInfo pathInfo : infos) {
snapMap = new HashMap<>();
final TypeAndClassifier tc = new SimpleTypeAndClassifier(pathInfo.getType(), pathInfo.getClassifier());
final TypeMapping mapping = typeMapper.lookup(tc);
final String classifier = mapping == null ? pathInfo.getClassifier() : mapping.getClassifier();
if (classifier != null && classifier.length() > 0) {
snapMap.put(CLASSIFIER, classifier);
}
snapMap.put(EXTENSION, mapping == null ? pathInfo.getType() : mapping.getExtension());
snapMap.put(VALUE, pathInfo.getVersion());
snapMap.put(UPDATED, getUpdateTimestamp(pathInfo.getSnapshotInfo(), currentTimestamp));
xml.createElement(doc, "versioning/snapshotVersions/snapshotVersion", snapMap);
}
}
final String xmlStr = xml.toXML(doc, true);
stream = metadataFile.openOutputStream(TransferOperation.GENERATE, true, eventMetadata);
stream.write(xmlStr.getBytes(UTF_8));
} catch (final GalleyMavenXMLException e) {
throw new IndyWorkflowException("Failed to generate maven metadata file: %s. Reason: %s", e, path, e.getMessage());
} catch (final IOException e) {
throw new IndyWorkflowException("Failed to write generated maven metadata file: %s. Reason: %s", e, metadataFile, e.getMessage());
} finally {
closeQuietly(stream);
}
return true;
}
Aggregations