@Override protected void merge(Metadata recessive) { Snapshot snapshot; String lastUpdated; if (metadata.getVersioning() == null) { DateFormat utcDateFormatter = new SimpleDateFormat("yyyyMMdd.HHmmss"); utcDateFormatter.setCalendar(new GregorianCalendar()); utcDateFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); snapshot = new Snapshot(); snapshot.setBuildNumber(getBuildNumber(recessive) + 1); snapshot.setTimestamp(utcDateFormatter.format(new Date())); Versioning versioning = new Versioning(); versioning.setSnapshot(snapshot); versioning.setLastUpdated(snapshot.getTimestamp().replace(".", "")); lastUpdated = versioning.getLastUpdated(); metadata.setVersioning(versioning); } else { snapshot = metadata.getVersioning().getSnapshot(); lastUpdated = metadata.getVersioning().getLastUpdated(); } for (Artifact artifact : artifacts) { String version = artifact.getVersion(); if (version.endsWith(SNAPSHOT)) { String qualifier = snapshot.getTimestamp() + '-' + snapshot.getBuildNumber(); version = version.substring(0, version.length() - SNAPSHOT.length()) + qualifier; } SnapshotVersion sv = new SnapshotVersion(); sv.setClassifier(artifact.getClassifier()); sv.setExtension(artifact.getExtension()); sv.setVersion(version); sv.setUpdated(lastUpdated); versions.put(getKey(sv.getClassifier(), sv.getExtension()), sv); } artifacts.clear(); Versioning versioning = recessive.getVersioning(); if (versioning != null) { for (SnapshotVersion sv : versioning.getSnapshotVersions()) { String key = getKey(sv.getClassifier(), sv.getExtension()); if (!versions.containsKey(key)) { versions.put(key, sv); } } } if (!legacyFormat) { metadata.getVersioning().setSnapshotVersions(new ArrayList<>(versions.values())); } }
public static SnapshotVersion searchForEquivalent( SnapshotVersion source, List<SnapshotVersion> list) { for (SnapshotVersion equivalent : list) { if (StringUtils.equals(source.getExtension(), equivalent.getExtension()) && ((StringUtils.isEmpty(source.getClassifier()) && StringUtils.isEmpty(equivalent.getClassifier())) || StringUtils.equals(source.getClassifier(), equivalent.getClassifier()))) { return equivalent; } } return null; }
private boolean updateSnapshot(Metadata metadata) throws MetadataException { final Versioning vs = metadata.getVersioning(); if (operand.getSnapshot() != null) { vs.setSnapshot(operand.getSnapshot()); } List<SnapshotVersion> extras = operand.getSnapshotVersions(); List<SnapshotVersion> currents = vs.getSnapshotVersions(); if (extras != null && extras.size() > 0) { // fix/upgrade the version ModelVersionUtility.setModelVersion(metadata, ModelVersionUtility.LATEST_MODEL_VERSION); for (SnapshotVersion extra : extras) { SnapshotVersion current = MetadataUtil.searchForEquivalent(extra, currents); if (current == null) { currents.add(extra); } else { try { if (TimeUtil.compare(current.getUpdated(), extra.getUpdated()) < 0) { currents.remove(current); currents.add(extra); } } catch (ParseException e) { throw new MetadataException( "Invalid timetamp: " + current.getUpdated() + "-" + extra.getUpdated(), e); } } } } else if (Version.V100 == operand.getOriginModelVersion()) { for (SnapshotVersion current : currents) { current.setUpdated(operand.getTimestamp()); } } vs.setLastUpdated(operand.getTimestamp()); return true; }