@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()));
    }
  }
Esempio n. 2
0
  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;
  }