예제 #1
0
  /**
   * Creating a KieBase from the workflow GAV specified in the config.
   *
   * @return KieBase for package SRAMPPackage
   * @throws SrampClientException
   * @throws SrampAtomException
   */
  public KieContainer getKieContainer(ReleaseId releaseId)
      throws SrampClientException, SrampAtomException {
    KieServices ks = KieServices.Factory.get();
    KieRepository repo = ks.getRepository();
    SrampAtomApiClient client = SrampAtomApiClientFactory.createAtomApiClient();

    Governance governance = new Governance();
    QueryResultSet results =
        client
            .buildQuery(SRAMP_KIE_JAR_QUERY)
            .parameter(governance.getGovernanceWorkflowGroup())
            .parameter(governance.getGovernanceWorkflowName())
            .parameter(governance.getGovernanceWorkflowVersion())
            .count(1)
            .query();
    if (results.size() > 0) {
      ArtifactSummary artifactSummery = results.get(0);
      InputStream is = client.getArtifactContent(artifactSummery);
      KieModule kModule = repo.addKieModule(ks.getResources().newInputStreamResource(is));
      logger.info(
          Messages.i18n.format(
              "KieSrampUtil.CreatingKieContainer", artifactSummery)); // $NON-NLS-1$
      KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
      // Creating the KieBase for the SRAMPPackage
      logger.info(
          Messages.i18n.format(
              "KieSrampUtil.FindKieBase",
              governance.getGovernanceWorkflowPackage())); // $NON-NLS-1$
      return kContainer;
    } else {
      return null;
    }
  }
예제 #2
0
 /**
  * @see org.overlord.sramp.common.shell.AbstractShellCommand#tabCompletion(java.lang.String,
  *     java.util.List)
  */
 @Override
 public int tabCompletion(String lastArgument, List<CharSequence> candidates) {
   if (getArguments().isEmpty() && (lastArgument == null || "feed:".startsWith(lastArgument))) {
     QName feedVarName = new QName("s-ramp", "feed");
     QueryResultSet rset = (QueryResultSet) getContext().getVariable(feedVarName);
     if (rset != null) {
       for (int idx = 0; idx < rset.size(); idx++) {
         String candidate = "feed:" + (idx + 1);
         if (lastArgument == null) {
           candidates.add(candidate);
         }
         if (lastArgument != null && candidate.startsWith(lastArgument)) {
           candidates.add(candidate);
         }
       }
     }
     return 0;
   } else if (getArguments().size() == 1) {
     if (lastArgument == null) lastArgument = "";
     FileNameCompleter delegate = new FileNameCompleter();
     return delegate.complete(lastArgument, lastArgument.length(), candidates);
   } else {
     return -1;
   }
 }
예제 #3
0
파일: SrampWagon.java 프로젝트: rnc/s-ramp
 /**
  * Ensures that the required ArtifactGrouping is present in the repository.
  *
  * @throws SrampAtomException
  * @throws SrampClientException
  */
 private BaseArtifactType ensureArtifactGrouping()
     throws SrampClientException, SrampAtomException {
   String groupingName = getParamFromRepositoryUrl("artifactGrouping"); // $NON-NLS-1$
   if (groupingName == null || groupingName.trim().length() == 0) {
     logger.warn(Messages.i18n.format("NO_ARTIFACT_GROUPING_NAME")); // $NON-NLS-1$
     return null;
   }
   QueryResultSet query =
       client
           .buildQuery("/s-ramp/ext/ArtifactGrouping[@name = ?]")
           .parameter(groupingName)
           .count(2)
           .query(); //$NON-NLS-1$
   if (query.size() > 1) {
     logger.warn(
         Messages.i18n.format("MULTIPLE_ARTIFACT_GROUPSING_FOUND", groupingName)); // $NON-NLS-1$
     return null;
   } else if (query.size() == 1) {
     ArtifactSummary summary = query.get(0);
     return client.getArtifactMetaData(summary.getType(), summary.getUuid());
   } else {
     ExtendedArtifactType groupingArtifact = new ExtendedArtifactType();
     groupingArtifact.setArtifactType(BaseArtifactEnum.EXTENDED_ARTIFACT_TYPE);
     groupingArtifact.setExtendedType("ArtifactGrouping"); // $NON-NLS-1$
     groupingArtifact.setName(groupingName);
     groupingArtifact.setDescription(
         Messages.i18n.format("ARTIFACT_GROUPING_DESCRIPTION")); // $NON-NLS-1$
     return client.createArtifact(groupingArtifact);
   }
 }
예제 #4
0
  /**
   * Main.
   *
   * @param args
   */
  public static void main(String[] args) throws Exception {
    System.out.println("\n*** Running S-RAMP Simple Client Demo ***\n");

    // Figure out the endpoint of the S-RAMP repository's Atom API
    String endpoint = System.getProperty("sramp.endpoint");
    if (endpoint == null || endpoint.trim().length() == 0) {
      endpoint = DEFAULT_ENDPOINT;
    }
    System.out.println("S-RAMP Endpoint: " + endpoint);

    // Upload some artifacts to the S-RAMP repository
    System.out.println("Uploading some XML schemas...");
    SrampAtomApiClient client = new SrampAtomApiClient(endpoint);
    for (String file : FILES) {
      // Get an InputStream over the file content
      InputStream is = SimpleClientDemo.class.getResourceAsStream(file);

      try {
        // We need to know the artifact type
        ArtifactType type = ArtifactType.XsdDocument;
        if (file.endsWith(".wsdl")) {
          type = ArtifactType.WsdlDocument;
        }

        // Upload that content to S-RAMP
        System.out.print("\tUploading artifact " + file + "...");
        BaseArtifactType artifact = client.uploadArtifact(type, is, file);
        System.out.println("done.");

        // Update the artifact meta-data (set the version and add a custom property)
        artifact.setVersion("1.1");
        SrampModelUtils.setCustomProperty(artifact, "demo", "simple-client");

        // Tell the server about the updated meta-data
        System.out.print("\tUpdating meta-data for artifact " + file + "...");
        client.updateArtifactMetaData(artifact);
        System.out.println("done.");
      } finally {
        is.close();
      }
    }

    // Now query the S-RAMP repository (for the Schemas only)
    System.out.print("Querying the S-RAMP repository for Schemas...");
    QueryResultSet rset = client.query("/s-ramp/xsd/XsdDocument");
    System.out.println("success: " + rset.size() + " Schemas found:");
    for (ArtifactSummary entry : rset) {
      System.out.println("\t * " + entry.getName() + " (" + entry.getUuid() + ")");
    }

    System.out.println("\n*** Demo Completed Successfully ***\n\n");
    Thread.sleep(3000);
  }
  /*
   * (non-Javadoc)
   *
   * @see org.jboss.arquillian.container.sramp.SrampService#undeployArchives()
   */
  public void undeployArchives(String archiveId) throws SrampClientException, SrampAtomException {

    log.debug("Deleting expanded artifacts");

    // Delete expanded artifacts
    QueryResultSet rset =
        client
            .buildQuery("/s-ramp[expandedFromDocument[@arquillian-archive-id = ?]]")
            .parameter(archiveId)
            .query();

    for (ArtifactSummary artifactSummary : rset) {
      log.debug("Deleting: " + artifactSummary.getName());
      client.deleteArtifact(artifactSummary.getUuid(), artifactSummary.getType());
    }

    // Delete (un)deployment information
    rset =
        client
            .buildQuery("/s-ramp[describesDeployment[@arquillian-archive-id = ?]]")
            .parameter(archiveId)
            .query();
    for (ArtifactSummary artifactSummary : rset) {
      log.debug("Deleting: " + artifactSummary.getName());
      client.deleteArtifact(artifactSummary.getUuid(), artifactSummary.getType());
    }

    // Delete main archive
    // Related are deleted along with the primary
    rset = client.buildQuery("/s-ramp[@arquillian-archive-id = ?]").parameter(archiveId).query();

    ArtifactSummary archiveArtifact = rset.get(0);

    log.debug("Deleting: " + archiveArtifact.getName());

    client.deleteArtifact(archiveArtifact.getUuid(), archiveArtifact.getType());

    // Internal consistency check whether the number of artifacts before
    // deploy and after deploy match
    long artifactCounterTemp = client.query("/s-ramp").getTotalResults();

    if (artifactCounter != artifactCounterTemp) {
      log.warn("Artifact counts does not match!");
      log.warn(
          "Artifacts before deploy: "
              + artifactCounter
              + ". Artifacts after undeploy: "
              + artifactCounterTemp);
      artifactCounter = artifactCounterTemp;
    }
  }
예제 #6
0
  /** @see org.overlord.sramp.common.shell.ShellCommand#execute() */
  @Override
  public void execute() throws Exception {
    QName clientVarName = new QName("s-ramp", "client");
    QName artifactVarName = new QName("s-ramp", "artifact");
    QName feedVarName = new QName("s-ramp", "feed");

    SrampAtomApiClient client = (SrampAtomApiClient) getContext().getVariable(clientVarName);
    if (client == null) {
      print("No S-RAMP repository connection is currently open.");
      return;
    }

    BaseArtifactType artifact = null;
    String artifactIdArg = this.optionalArgument(0);
    if (artifactIdArg == null) {
      artifact = (BaseArtifactType) getContext().getVariable(artifactVarName);
      if (artifact == null) {
        print("No active S-RAMP artifact exists.  Use s-ramp:getMetaData.");
        return;
      }
    } else {
      String idType = artifactIdArg.substring(0, artifactIdArg.indexOf(':'));
      if ("feed".equals(idType)) {
        QueryResultSet rset = (QueryResultSet) getContext().getVariable(feedVarName);
        int feedIdx = Integer.parseInt(artifactIdArg.substring(artifactIdArg.indexOf(':') + 1)) - 1;
        if (feedIdx < 0 || feedIdx >= rset.size()) {
          throw new InvalidCommandArgumentException(0, "Feed index out of range.");
        }
        ArtifactSummary summary = rset.get(feedIdx);
        String artifactUUID = summary.getUuid();
        artifact = client.getArtifactMetaData(summary.getType(), artifactUUID);
      } else if ("uuid".equals(idType)) {
        throw new InvalidCommandArgumentException(
            0, "uuid: style artifact identifiers not yet implemented.");
      } else {
        throw new InvalidCommandArgumentException(0, "Invalid artifact id format.");
      }
    }

    try {
      client.deleteArtifact(artifact.getUuid(), ArtifactType.valueOf(artifact));
      print("Successfully deleted artifact '%1$s'.", artifact.getName());
    } catch (Exception e) {
      print("FAILED to delete the artifact.");
      print("\t" + e.getMessage());
    }
  }
예제 #7
0
 /**
  * Returns true if the workflow JAR is deployed to the s-ramp repository.
  *
  * @param groupId
  * @param artifactId
  * @param version
  * @return true or false
  */
 public boolean isSRAMPPackageDeployed(String groupId, String artifactId, String version) {
   try {
     SrampAtomApiClient client = SrampAtomApiClientFactory.createAtomApiClient();
     QueryResultSet results =
         client
             .buildQuery(SRAMP_KIE_JAR_QUERY)
             .parameter(groupId)
             .parameter(artifactId)
             .parameter(version)
             .count(1)
             .query();
     if (results.size() > 0) {
       return Boolean.TRUE;
     }
   } catch (SrampClientException e) {
     logger.error(e.getMessage(), e);
   } catch (SrampAtomException e) {
     logger.error(e.getMessage(), e);
   }
   return Boolean.FALSE;
 }
예제 #8
0
파일: SrampWagon.java 프로젝트: rnc/s-ramp
  /**
   * Finds an existing artifact in the s-ramp repository that matches the GAV information.
   *
   * @param client
   * @param gavInfo
   * @return an s-ramp artifact (if found) or null (if not found)
   * @throws SrampClientException
   * @throws SrampAtomException
   * @throws JAXBException
   */
  private BaseArtifactType findExistingArtifactByGAV(
      SrampAtomApiClient client, MavenGavInfo gavInfo)
      throws SrampAtomException, SrampClientException, JAXBException {
    SrampClientQuery clientQuery = null;

    StringBuilder queryBuilder = new StringBuilder();
    queryBuilder.append("/s-ramp"); // $NON-NLS-1$
    List<String> criteria = new ArrayList<String>();
    List<Object> params = new ArrayList<Object>();

    criteria.add("@maven.groupId = ?"); // $NON-NLS-1$
    params.add(gavInfo.getGroupId());
    criteria.add("@maven.artifactId = ?"); // $NON-NLS-1$
    params.add(gavInfo.getArtifactId());
    criteria.add("@maven.version = ?"); // $NON-NLS-1$
    params.add(gavInfo.getVersion());

    if (StringUtils.isNotBlank(gavInfo.getType())) {
      criteria.add("@maven.type = ?"); // $NON-NLS-1$
      params.add(gavInfo.getType());
    }
    if (StringUtils.isNotBlank(gavInfo.getClassifier())) {
      criteria.add("@maven.classifier = ?"); // $NON-NLS-1$
      params.add(gavInfo.getClassifier());
    }
    if (StringUtils.isNotBlank(gavInfo.getSnapshotId())) {
      return null;
    } else {
      criteria.add("xp2:not(@maven.snapshot.id)"); // $NON-NLS-1$
    }

    if (criteria.size() > 0) {
      queryBuilder.append("["); // $NON-NLS-1$
      queryBuilder.append(StringUtils.join(criteria, " and ")); // $NON-NLS-1$
      queryBuilder.append("]"); // $NON-NLS-1$
    }
    clientQuery = client.buildQuery(queryBuilder.toString());
    for (Object param : params) {
      if (param instanceof String) {
        clientQuery.parameter((String) param);
      }
      if (param instanceof Calendar) {
        clientQuery.parameter((Calendar) param);
      }
    }

    QueryResultSet rset = clientQuery.count(100).query();
    if (rset.size() > 0) {
      for (ArtifactSummary summary : rset) {
        String uuid = summary.getUuid();
        ArtifactType artifactType = summary.getType();
        BaseArtifactType arty = client.getArtifactMetaData(artifactType, uuid);
        // If no classifier in the GAV info, only return the artifact that also has no classifier
        // TODO replace this with "not(@maven.classifer)" in the query, then force the result set to
        // return 2 items (expecting only 1)
        if (gavInfo.getClassifier() == null) {
          String artyClassifier =
              SrampModelUtils.getCustomProperty(arty, "maven.classifier"); // $NON-NLS-1$
          if (artyClassifier == null) {
            return arty;
          }
        } else {
          // If classifier was supplied in the GAV info, we'll get the first artifact <shrug>
          return arty;
        }
      }
    }
    return null;
  }
예제 #9
0
파일: SrampWagon.java 프로젝트: rnc/s-ramp
  /**
   * Generates the maven-metadata.xml file dynamically for a given
   * groupId/artifactId/snapshot-version. This will list all of the snapshot versions available.
   *
   * @param gavInfo
   * @param inputData
   * @throws ResourceDoesNotExistException
   */
  private void doGenerateSnapshotMavenMetaData(MavenGavInfo gavInfo, InputData inputData)
      throws ResourceDoesNotExistException {
    // See the comment in {@link SrampWagon#fillInputData(InputData)} about why we're doing this
    // context classloader magic.
    ClassLoader oldCtxCL = Thread.currentThread().getContextClassLoader();
    Thread.currentThread().setContextClassLoader(SrampWagon.class.getClassLoader());
    try {
      String artyPath = gavInfo.getFullName();
      if (gavInfo.isHash()) {
        artyPath = artyPath.substring(0, artyPath.lastIndexOf('.'));
      }
      SrampArchiveEntry entry = this.archive.getEntry(artyPath);
      if (entry == null) {
        QueryResultSet resultSet =
            client
                .buildQuery(
                    "/s-ramp[@maven.groupId = ? and @maven.artifactId = ? and @maven.version = ?]") //$NON-NLS-1$
                .parameter(gavInfo.getGroupId())
                .parameter(gavInfo.getArtifactId())
                .parameter(gavInfo.getVersion())
                .propertyName("maven.classifier")
                .propertyName("maven.type") // $NON-NLS-1$ //$NON-NLS-2$
                .count(500)
                .orderBy("createdTimestamp")
                .ascending()
                .query(); //$NON-NLS-1$
        if (resultSet.size() == 0) {
          throw new Exception(Messages.i18n.format("NO_ARTIFACTS_FOUND")); // $NON-NLS-1$
        }

        SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyyMMdd.HHmmss"); // $NON-NLS-1$
        SimpleDateFormat updatedFormat = new SimpleDateFormat("yyyyMMddHHmmss"); // $NON-NLS-1$

        StringBuilder snapshotVersions = new StringBuilder();
        snapshotVersions.append("    <snapshotVersions>\n"); // $NON-NLS-1$
        Set<String> processed = new HashSet<String>();
        Date latestDate = null;
        for (ArtifactSummary artifactSummary : resultSet) {
          String extension = artifactSummary.getCustomPropertyValue("maven.type"); // $NON-NLS-1$
          String classifier =
              artifactSummary.getCustomPropertyValue("maven.classifier"); // $NON-NLS-1$
          String value = gavInfo.getVersion();
          Date updatedDate = artifactSummary.getLastModifiedTimestamp();
          String updated = updatedFormat.format(updatedDate);
          String pkey = classifier + "::" + extension; // $NON-NLS-1$
          if (processed.add(pkey)) {
            snapshotVersions.append("      <snapshotVersion>\n"); // $NON-NLS-1$
            if (classifier != null)
              snapshotVersions
                  .append("        <classifier>")
                  .append(classifier)
                  .append("</classifier>\n"); // $NON-NLS-1$ //$NON-NLS-2$
            snapshotVersions
                .append("        <extension>")
                .append(extension)
                .append("</extension>\n"); // $NON-NLS-1$ //$NON-NLS-2$
            snapshotVersions
                .append("        <value>")
                .append(value)
                .append("</value>\n"); // $NON-NLS-1$ //$NON-NLS-2$
            snapshotVersions
                .append("        <updated>")
                .append(updated)
                .append("</updated>\n"); // $NON-NLS-1$ //$NON-NLS-2$
            snapshotVersions.append("      </snapshotVersion>\n"); // $NON-NLS-1$
            if (latestDate == null || latestDate.before(updatedDate)) {
              latestDate = updatedDate;
            }
          }
        }
        snapshotVersions.append("    </snapshotVersions>\n"); // $NON-NLS-1$

        String groupId = gavInfo.getGroupId();
        String artifactId = gavInfo.getArtifactId();
        String version = gavInfo.getVersion();
        String lastUpdated = updatedFormat.format(latestDate);

        StringBuilder mavenMetadata = new StringBuilder();
        mavenMetadata.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); // $NON-NLS-1$
        mavenMetadata.append("<metadata>\n"); // $NON-NLS-1$
        mavenMetadata
            .append("  <groupId>")
            .append(groupId)
            .append("</groupId>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata
            .append("  <artifactId>")
            .append(artifactId)
            .append("</artifactId>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata
            .append("  <version>")
            .append(version)
            .append("</version>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata.append("  <versioning>\n"); // $NON-NLS-1$
        mavenMetadata.append("    <snapshot>\n"); // $NON-NLS-1$
        mavenMetadata
            .append("      <timestamp>")
            .append(timestampFormat.format(latestDate))
            .append("</timestamp>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata.append("      <buildNumber>1</buildNumber>\n"); // $NON-NLS-1$
        mavenMetadata.append("    </snapshot>\n"); // $NON-NLS-1$
        mavenMetadata
            .append("    <lastUpdated>")
            .append(lastUpdated)
            .append("</lastUpdated>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata.append(snapshotVersions.toString());
        mavenMetadata.append("  </versioning>\n"); // $NON-NLS-1$
        mavenMetadata.append("</metadata>\n"); // $NON-NLS-1$

        BaseArtifactType artifact =
            ArtifactType.ExtendedDocument("MavenMetaData").newArtifactInstance(); // $NON-NLS-1$
        this.archive.addEntry(artyPath, artifact, IOUtils.toInputStream(mavenMetadata.toString()));

        entry = this.archive.getEntry(artyPath);
      }

      if (!gavInfo.isHash()) {
        inputData.setInputStream(this.archive.getInputStream(entry));
      } else {
        String hash = generateHash(this.archive.getInputStream(entry), gavInfo.getHashAlgorithm());
        inputData.setInputStream(IOUtils.toInputStream(hash));
      }
    } catch (Exception e) {
      throw new ResourceDoesNotExistException(
          Messages.i18n.format("FAILED_TO_GENERATE_METADATA"), e); // $NON-NLS-1$
    } finally {
      Thread.currentThread().setContextClassLoader(oldCtxCL);
    }
  }
예제 #10
0
파일: SrampWagon.java 프로젝트: rnc/s-ramp
  /**
   * Generates the maven-metadata.xml file dynamically for a given groupId/artifactId pair. This
   * will list all of the versions available for that groupId+artifactId, along with the latest
   * release and snapshot versions.
   *
   * @param gavInfo
   * @param inputData
   * @throws ResourceDoesNotExistException
   */
  private void doGenerateArtifactDirMavenMetaData(MavenGavInfo gavInfo, InputData inputData)
      throws ResourceDoesNotExistException {
    // See the comment in {@link SrampWagon#fillInputData(InputData)} about why we're doing this
    // context classloader magic.
    ClassLoader oldCtxCL = Thread.currentThread().getContextClassLoader();
    Thread.currentThread().setContextClassLoader(SrampWagon.class.getClassLoader());
    try {
      String artyPath = gavInfo.getFullName();
      if (gavInfo.isHash()) {
        artyPath = artyPath.substring(0, artyPath.lastIndexOf('.'));
      }
      SrampArchiveEntry entry = this.archive.getEntry(artyPath);
      if (entry == null) {
        QueryResultSet resultSet =
            client
                .buildQuery("/s-ramp[@maven.groupId = ? and @maven.artifactId = ?]") // $NON-NLS-1$
                .parameter(gavInfo.getGroupId())
                .parameter(gavInfo.getArtifactId())
                .propertyName("maven.version") // $NON-NLS-1$
                .count(500)
                .orderBy("createdTimestamp")
                .ascending()
                .query(); //$NON-NLS-1$
        if (resultSet.size() == 0) {
          throw new Exception(Messages.i18n.format("NO_ARTIFACTS_FOUND")); // $NON-NLS-1$
        }

        String groupId = gavInfo.getGroupId();
        String artifactId = gavInfo.getArtifactId();
        String latest = null;
        String release = null;
        String lastUpdated = null;

        LinkedHashSet<String> versions = new LinkedHashSet<String>();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); // $NON-NLS-1$
        for (ArtifactSummary artifactSummary : resultSet) {
          String version = artifactSummary.getCustomPropertyValue("maven.version"); // $NON-NLS-1$
          if (versions.add(version)) {
            latest = version;
            if (!version.endsWith("-SNAPSHOT")) { // $NON-NLS-1$
              release = version;
            }
          }
          lastUpdated = format.format(artifactSummary.getCreatedTimestamp());
        }

        StringBuilder mavenMetadata = new StringBuilder();
        mavenMetadata.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); // $NON-NLS-1$
        mavenMetadata.append("<metadata>\n"); // $NON-NLS-1$
        mavenMetadata
            .append("  <groupId>")
            .append(groupId)
            .append("</groupId>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata
            .append("  <artifactId>")
            .append(artifactId)
            .append("</artifactId>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata.append("  <versioning>\n"); // $NON-NLS-1$
        mavenMetadata
            .append("    <latest>")
            .append(latest)
            .append("</latest>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata
            .append("    <release>")
            .append(release)
            .append("</release>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata.append("    <versions>\n"); // $NON-NLS-1$
        for (String version : versions) {
          mavenMetadata
              .append("      <version>")
              .append(version)
              .append("</version>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        }
        mavenMetadata.append("    </versions>\n"); // $NON-NLS-1$
        mavenMetadata
            .append("    <lastUpdated>")
            .append(lastUpdated)
            .append("</lastUpdated>\n"); // $NON-NLS-1$ //$NON-NLS-2$
        mavenMetadata.append("  </versioning>\n"); // $NON-NLS-1$
        mavenMetadata.append("</metadata>\n"); // $NON-NLS-1$

        BaseArtifactType artifact =
            ArtifactType.ExtendedDocument("MavenMetaData").newArtifactInstance(); // $NON-NLS-1$
        this.archive.addEntry(artyPath, artifact, IOUtils.toInputStream(mavenMetadata.toString()));

        entry = this.archive.getEntry(artyPath);
      }

      if (!gavInfo.isHash()) {
        inputData.setInputStream(this.archive.getInputStream(entry));
      } else {
        String hash = generateHash(this.archive.getInputStream(entry), gavInfo.getHashAlgorithm());
        inputData.setInputStream(IOUtils.toInputStream(hash));
      }
    } catch (Exception e) {
      throw new ResourceDoesNotExistException(
          Messages.i18n.format("FAILED_TO_GENERATE_METADATA"), e); // $NON-NLS-1$
    } finally {
      Thread.currentThread().setContextClassLoader(oldCtxCL);
    }
  }