示例#1
0
  /**
   * Gets the hash data from the s-ramp repository and stores it in the {@link InputData} for use by
   * Maven.
   *
   * @param gavInfo
   * @param inputData
   * @throws TransferFailedException
   * @throws ResourceDoesNotExistException
   * @throws AuthorizationException
   */
  private void doGetHash(MavenGavInfo gavInfo, InputData inputData)
      throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException {
    String artyPath = gavInfo.getFullName();
    String hashPropName;
    if (gavInfo.getType().endsWith(".md5")) { // $NON-NLS-1$
      hashPropName = "maven.hash.md5"; // $NON-NLS-1$
      artyPath = artyPath.substring(0, artyPath.length() - 4);
    } else {
      hashPropName = "maven.hash.sha1"; // $NON-NLS-1$
      artyPath = artyPath.substring(0, artyPath.length() - 5);
    }
    // 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 {
      SrampArchiveEntry entry = this.archive.getEntry(artyPath);
      if (entry == null) {
        throw new ResourceDoesNotExistException(
            Messages.i18n.format("MISSING_RESOURCE_HASH", gavInfo.getName())); // $NON-NLS-1$
      }
      BaseArtifactType metaData = entry.getMetaData();

      String hashValue = SrampModelUtils.getCustomProperty(metaData, hashPropName);
      if (hashValue == null) {
        throw new ResourceDoesNotExistException(
            Messages.i18n.format("MISSING_RESOURCE_HASH", gavInfo.getName())); // $NON-NLS-1$
      }
      inputData.setInputStream(IOUtils.toInputStream(hashValue));
    } finally {
      Thread.currentThread().setContextClassLoader(oldCtxCL);
    }
  }
示例#2
0
  /**
   * Updates an artifact by storing its hash value as an S-RAMP property.
   *
   * @param gavInfo
   * @param resourceInputStream
   * @throws TransferFailedException
   */
  private void doPutHash(MavenGavInfo gavInfo, InputStream resourceInputStream)
      throws TransferFailedException {
    logger.info(Messages.i18n.format("STORING_HASH_AS_PROP", gavInfo.getName())); // $NON-NLS-1$
    try {
      String artyPath = gavInfo.getFullName();
      String hashPropName;
      if (gavInfo.getType().endsWith(".md5")) { // $NON-NLS-1$
        hashPropName = "maven.hash.md5"; // $NON-NLS-1$
        artyPath = artyPath.substring(0, artyPath.length() - 4);
      } else {
        hashPropName = "maven.hash.sha1"; // $NON-NLS-1$
        artyPath = artyPath.substring(0, artyPath.length() - 5);
      }
      String hashValue = IOUtils.toString(resourceInputStream);

      // 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 {
        SrampArchiveEntry entry = this.archive.getEntry(artyPath);
        // Re-fetch the artifact meta-data in case it changed on the server since we uploaded it.
        BaseArtifactType metaData = client.getArtifactMetaData(entry.getMetaData().getUuid());
        SrampModelUtils.setCustomProperty(metaData, hashPropName, hashValue);
        this.archive.updateEntry(entry, null);

        // The meta-data has been updated in the local/temp archive - now send it to the remote repo
        client.updateArtifactMetaData(metaData);
      } catch (Throwable t) {
        throw new TransferFailedException(t.getMessage(), t);
      } finally {
        Thread.currentThread().setContextClassLoader(oldCtxCL);
      }
    } catch (Exception e) {
      throw new TransferFailedException(
          Messages.i18n.format("FAILED_TO_STORE_HASH", gavInfo.getName()), e); // $NON-NLS-1$
    }
  }