/** * 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); } }
/** * 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$ } }