/**
   * Tests that we can update the content of an s-ramp artifact.
   *
   * @throws Exception
   */
  @Test
  public void testUpdateContent() throws Exception {
    // First, add an artifact to the repo
    String artifactFileName = "PO.xsd";
    InputStream POXsd =
        this.getClass().getResourceAsStream("/sample-files/xsd/" + artifactFileName);
    Document document = new Document();
    document.setName(artifactFileName);
    document.setArtifactType(BaseArtifactEnum.XSD_DOCUMENT);
    BaseArtifactType artifact = persistenceManager.persistArtifact(document, POXsd);
    Assert.assertNotNull(artifact);
    log.info("persisted PO.xsd to JCR, returned artifact uuid=" + artifact.getUuid());
    Assert.assertEquals(XsdDocument.class, artifact.getClass());
    long size = ((DocumentArtifactType) artifact).getContentSize();
    Assert.assertTrue(
        size
            >= 2376L); // Not doing an equals here due to the vagaries of Windows vs *nix line
                       // endings
    Assert.assertEquals(artifactFileName, artifact.getName());

    // Now update the artifact content
    InputStream otherXsd = this.getClass().getResourceAsStream("/sample-files/xsd/XMLSchema.xsd");
    persistenceManager.updateArtifactContent(
        artifact.getUuid(), ArtifactType.XsdDocument(), otherXsd);

    // Now verify the content was updated
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.XsdDocument());
    size = ((DocumentArtifactType) artifact).getContentSize();
    Assert.assertTrue(
        size
            >= 87677L); // Not doing an equals here due to the vagaries of Windows vs *nix line
                        // endings
  }
  /** @see org.overlord.sramp.shell.api.shell.ShellCommand#execute() */
  @Override
  public boolean execute() throws Exception {
    String filePathArg =
        this.requiredArgument(
            0, Messages.i18n.format("Upload.InvalidArgMsg.LocalFile")); // $NON-NLS-1$
    String artifactTypeArg = this.optionalArgument(1);

    QName clientVarName = new QName("s-ramp", "client"); // $NON-NLS-1$ //$NON-NLS-2$
    SrampAtomApiClient client = (SrampAtomApiClient) getContext().getVariable(clientVarName);
    if (client == null) {
      print(Messages.i18n.format("MissingSRAMPConnection")); // $NON-NLS-1$
      return false;
    }
    InputStream content = null;
    ZipToSrampArchive expander = null;
    SrampArchive archive = null;
    try {
      File file = new File(filePathArg);
      ArtifactType artifactType = null;
      if (artifactTypeArg != null) {
        artifactType = ArtifactType.valueOf(artifactTypeArg);
        if (artifactType.isExtendedType()) {
          artifactType = ArtifactType.ExtendedDocument(artifactType.getExtendedType());
        }
      } else {
        artifactType = determineArtifactType(file);
      }
      content = FileUtils.openInputStream(file);
      BaseArtifactType artifact = client.uploadArtifact(artifactType, content, file.getName());
      IOUtils.closeQuietly(content);

      // Now also add "expanded" content to the s-ramp repository
      expander = ZipToSrampArchiveRegistry.createExpander(artifactType, file);
      if (expander != null) {
        expander.setContextParam(DefaultMetaDataFactory.PARENT_UUID, artifact.getUuid());
        archive = expander.createSrampArchive();
        client.uploadBatch(archive);
      }

      // Put the artifact in the session as the active artifact
      QName artifactVarName = new QName("s-ramp", "artifact"); // $NON-NLS-1$ //$NON-NLS-2$
      getContext().setVariable(artifactVarName, artifact);
      print(Messages.i18n.format("Upload.Success")); // $NON-NLS-1$
      PrintArtifactMetaDataVisitor visitor = new PrintArtifactMetaDataVisitor();
      ArtifactVisitorHelper.visitArtifact(visitor, artifact);
    } catch (Exception e) {
      print(Messages.i18n.format("Upload.Failure")); // $NON-NLS-1$
      print("\t" + e.getMessage()); // $NON-NLS-1$
      IOUtils.closeQuietly(content);
      return false;
    }
    return true;
  }
  /*
   * (non-Javadoc)
   *
   * @see
   * org.jboss.arquillian.container.sramp.SrampService#deployArchive(java.
   * lang.String, java.lang.String, java.io.InputStream)
   */
  public BaseArtifactType deployArchive(
      String archiveId, String archiveName, String artifactTypeArg, InputStream content) {

    assert content != null;

    ZipToSrampArchive expander = null;
    SrampArchive archive = null;
    BaseArtifactType artifact = null;
    File tempResourceFile = null;
    try {
      // internal integrity check
      artifactCounter = client.query("/s-ramp").getTotalResults();

      // First, stash the content in a temp file - we may need it multiple
      // times.
      tempResourceFile = stashResourceContent(content);
      content = FileUtils.openInputStream(tempResourceFile);

      ArtifactType artifactType = ArtifactType.valueOf(artifactTypeArg);
      if (artifactType.isExtendedType()) {
        artifactType = ArtifactType.ExtendedDocument(artifactType.getExtendedType());
      }

      artifact = client.uploadArtifact(artifactType, content, archiveName);
      IOUtils.closeQuietly(content);

      // for all uploaded files add custom property
      SrampModelUtils.setCustomProperty(artifact, "arquillian-archive-id", archiveId);
      client.updateArtifactMetaData(artifact);

      content = FileUtils.openInputStream(tempResourceFile);

      // Now also add "expanded" content to the s-ramp repository
      expander = ZipToSrampArchiveRegistry.createExpander(artifactType, content);

      if (expander != null) {
        expander.setContextParam(DefaultMetaDataFactory.PARENT_UUID, artifact.getUuid());
        archive = expander.createSrampArchive();
        client.uploadBatch(archive);
      }
    } catch (Exception e) {
      log.error("Upload failure:", e);
      IOUtils.closeQuietly(content);
    } finally {
      SrampArchive.closeQuietly(archive);
      ZipToSrampArchive.closeQuietly(expander);
      FileUtils.deleteQuietly(tempResourceFile);
    }

    return artifact;
  }
 /**
  * Try to figure out what kind of artifact we're dealing with.
  *
  * @param file
  */
 private ArtifactType determineArtifactType(File file) {
   ArtifactType type = null;
   String extension = FilenameUtils.getExtension(file.getName());
   if ("wsdl".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.WsdlDocument();
   } else if ("xsd".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.XsdDocument();
   } else if ("wspolicy".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.PolicyDocument();
   } else if ("xml".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.XmlDocument();
   } else {
     type = ArtifactType.Document();
   }
   return type;
 }
  @Test
  public void testGetArtifact_XSD() throws Exception {
    String artifactFileName = "PO.xsd";
    InputStream POXsd =
        this.getClass().getResourceAsStream("/sample-files/xsd/" + artifactFileName);
    Document document = new Document();
    document.setName(artifactFileName);
    document.setArtifactType(BaseArtifactEnum.XSD_DOCUMENT);

    BaseArtifactType artifact = persistenceManager.persistArtifact(document, POXsd);

    Assert.assertNotNull(artifact);
    log.info("persisted PO.xsd to JCR, returned artifact uuid=" + artifact.getUuid());

    Assert.assertEquals(XsdDocument.class, artifact.getClass());
    long size = ((DocumentArtifactType) artifact).getContentSize();
    Assert.assertTrue(
        size
            >= 2376L); // Not doing an equals here due to the vagaries of Windows vs *nix line
                       // endings

    BaseArtifactType artifact2 =
        persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.XsdDocument());
    Assert.assertEquals(artifact.getUuid(), artifact2.getUuid());
    Assert.assertEquals(artifact.getCreatedBy(), artifact2.getCreatedBy());
    Assert.assertEquals(artifact.getDescription(), artifact2.getDescription());
    Assert.assertEquals(artifact.getLastModifiedBy(), artifact2.getLastModifiedBy());
    Assert.assertEquals(artifact.getName(), artifact2.getName());
    Assert.assertEquals(artifact.getVersion(), artifact2.getVersion());
    Assert.assertEquals(artifact.getLastModifiedTimestamp(), artifact2.getLastModifiedTimestamp());
  }
  @Test
  public void testPersistArtifactPO_XML() throws Exception {
    String artifactFileName = "PO.xml";
    InputStream POXml =
        this.getClass().getResourceAsStream("/sample-files/core/" + artifactFileName);

    Document document = new Document();
    document.setName(artifactFileName);
    document.setArtifactType(BaseArtifactEnum.XML_DOCUMENT);

    BaseArtifactType artifact = persistenceManager.persistArtifact(document, POXml);

    Assert.assertNotNull(artifact);
    log.info("persisted PO.xml to JCR, returned artifact uuid=" + artifact.getUuid());

    // print out the derived node
    if (log.isDebugEnabled()) {
      persistenceManager.printArtifactGraph(artifact.getUuid(), ArtifactType.XmlDocument());
    }
    Assert.assertEquals(XmlDocument.class, artifact.getClass());
    long size = ((DocumentArtifactType) artifact).getContentSize();
    Assert.assertTrue(
        size
            >= 825L); // Not doing an equals here due to the vagaries of Windows vs *nix line
                      // endings
  }
 /**
  * Try to figure out what kind of artifact we're dealing with.
  *
  * @param fileName the file name
  * @return the artifact type
  */
 private ArtifactType determineArtifactType(String fileName) {
   ArtifactType type = null;
   String extension = FilenameUtils.getExtension(fileName);
   if ("jar".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.ExtendedDocument(JavaModel.TYPE_ARCHIVE);
   } else if ("war".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.ExtendedDocument(JavaModel.TYPE_WEB_APPLICATION);
   } else if ("ear".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.ExtendedDocument(JavaModel.TYPE_ENTERPRISE_APPLICATION);
   } else if ("pom".equals(extension)) { // $NON-NLS-1$
     type = ArtifactType.ExtendedDocument(JavaModel.TYPE_MAVEN_POM_XML);
   } else {
     type = ArtifactType.Document();
   }
   return type;
 }
  @Test
  public void testDeleteArtifact() throws Exception {
    String artifactFileName = "s-ramp-press-release.pdf";
    InputStream pdf = this.getClass().getResourceAsStream("/sample-files/core/" + artifactFileName);
    Document document = new Document();
    document.setName(artifactFileName);
    document.setArtifactType(BaseArtifactEnum.DOCUMENT);

    // Add an artifact
    BaseArtifactType artifact = persistenceManager.persistArtifact(document, pdf);
    Assert.assertNotNull(artifact);
    Assert.assertEquals(Document.class, artifact.getClass());
    Assert.assertEquals(new Long(18873l), ((DocumentArtifactType) artifact).getContentSize());
    log.info(
        "persisted s-ramp-press-release.pdf to JCR, returned artifact uuid=" + artifact.getUuid());

    // Now delete that artifact
    ArtifactType at = ArtifactType.valueOf(artifact);
    persistenceManager.deleteArtifact(document.getUuid(), at);

    // Now make sure we can't load it back up
    BaseArtifactType deleted = persistenceManager.getArtifact(document.getUuid(), at);
    Assert.assertNull(deleted);

    SrampQuery query = queryManager.createQuery("/s-ramp[@uuid = ?]");
    query.setString(document.getUuid());
    ArtifactSet artifactSet = query.executeQuery();
    Assert.assertEquals(0, artifactSet.size());
  }
Exemple #9
0
 /**
  * Finds an existing artifact in the s-ramp repository using 'universal' form. This allows any
  * artifact in the s-ramp repository to be referenced as a Maven dependency using the model.type
  * and UUID of the artifact.
  *
  * @param client
  * @param artifactType
  * @param gavInfo
  * @return an existing s-ramp artifact (if found) or null (if not found)
  * @throws SrampClientException
  * @throws SrampAtomException
  * @throws JAXBException
  */
 private BaseArtifactType findExistingArtifactByUniversal(
     SrampAtomApiClient client, MavenGavInfo gavInfo)
     throws SrampAtomException, SrampClientException, JAXBException {
   String artifactType = gavInfo.getGroupId().substring(gavInfo.getGroupId().indexOf('.') + 1);
   String uuid = gavInfo.getArtifactId();
   try {
     return client.getArtifactMetaData(ArtifactType.valueOf(artifactType), uuid);
   } catch (Throwable t) {
     debug(t.getMessage());
   }
   return null;
 }
Exemple #10
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());
    }
  }
  /**
   * Uploads a single deployment to S-RAMP.
   *
   * @param deploymentType
   * @param fileName
   * @param client
   * @param tempFile
   * @param responseParams
   * @param version
   * @throws Exception
   */
  private void uploadSingleDeployment(
      String deploymentType,
      String fileName,
      File tempFile,
      Map<String, String> responseParams,
      String version)
      throws Exception {
    ArtifactType at = ArtifactType.valueOf(deploymentType);
    if (at.isExtendedType()) {
      at = ArtifactType.ExtendedDocument(at.getExtendedType());
    }
    String uuid = null;
    // First, upload the deployment
    InputStream contentStream = null;
    try {
      contentStream = FileUtils.openInputStream(tempFile);
      BaseArtifactType artifact = at.newArtifactInstance();
      artifact.setName(fileName);
      artifact.setVersion(version);
      artifact = clientAccessor.getClient().uploadArtifact(artifact, contentStream);
      responseParams.put("model", at.getArtifactType().getModel()); // $NON-NLS-1$
      responseParams.put("type", at.getArtifactType().getType()); // $NON-NLS-1$
      responseParams.put("uuid", artifact.getUuid()); // $NON-NLS-1$
      uuid = artifact.getUuid();
    } finally {
      IOUtils.closeQuietly(contentStream);
    }

    // Try to expand the artifact (works if an expander is available for the given artifact type).
    ZipToSrampArchive j2sramp = null;
    SrampArchive archive = null;
    try {
      j2sramp = ZipToSrampArchiveRegistry.createExpander(at, tempFile);
      if (j2sramp != null) {
        j2sramp.setContextParam(DefaultMetaDataFactory.PARENT_UUID, uuid);
        archive = j2sramp.createSrampArchive();
        clientAccessor.getClient().uploadBatch(archive);
      }
    } finally {
      SrampArchive.closeQuietly(archive);
      ZipToSrampArchive.closeQuietly(j2sramp);
    }
  }
Exemple #12
0
  @Test
  public void testPersistArtifact_PDF() throws Exception {
    String artifactFileName = "s-ramp-press-release.pdf";
    InputStream pdf = this.getClass().getResourceAsStream("/sample-files/core/" + artifactFileName);
    Document document = new Document();
    document.setName(artifactFileName);
    document.setArtifactType(BaseArtifactEnum.DOCUMENT);

    BaseArtifactType artifact = persistenceManager.persistArtifact(document, pdf);

    Assert.assertNotNull(artifact);
    log.info(
        "persisted s-ramp-press-release.pdf to JCR, returned artifact uuid=" + artifact.getUuid());

    // print out the derived node
    if (log.isDebugEnabled()) {
      persistenceManager.printArtifactGraph(artifact.getUuid(), ArtifactType.Document());
    }
    Assert.assertEquals(Document.class, artifact.getClass());
    Assert.assertEquals(new Long(18873l), ((DocumentArtifactType) artifact).getContentSize());
  }
Exemple #13
0
 /**
  * Gets the artifact type from the resource.
  *
  * @param gavInfo
  * @param archiveType
  */
 private ArtifactType getArtifactType(MavenGavInfo gavInfo, String archiveType) {
   String customAT = getParamFromRepositoryUrl("artifactType"); // $NON-NLS-1$
   if (gavInfo.getType().equals("pom")) { // $NON-NLS-1$
     return ArtifactType.valueOf("MavenPom"); // $NON-NLS-1$
   } else if (isPrimaryArtifact(gavInfo) && customAT != null) {
     return ArtifactType.valueOf(customAT);
   } else if (isPrimaryArtifact(gavInfo) && archiveType != null) {
     return ArtifactType.valueOf("ext", archiveType, true); // $NON-NLS-1$
   } else if ("jar".equals(gavInfo.getType())) { // $NON-NLS-1$
     return ArtifactType.valueOf(JavaModel.TYPE_ARCHIVE);
   } else if ("xml".equals(gavInfo.getType())) { // $NON-NLS-1$
     return ArtifactType.XmlDocument();
   } else {
     return ArtifactType.valueOf(ArtifactTypeEnum.Document.name());
   }
 }
Exemple #14
0
  /**
   * * Gets the artifact content from the s-ramp repository and stores it in the {@link InputData}
   * object for use by Maven.
   *
   * @param gavInfo
   * @param inputData
   * @throws TransferFailedException
   * @throws ResourceDoesNotExistException
   * @throws AuthorizationException
   */
  private void doGetArtifact(MavenGavInfo gavInfo, InputData inputData)
      throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException {
    // RESTEasy uses the current thread's context classloader to load its logger class.  This
    // fails in Maven because the context classloader is the wagon plugin's classloader, which
    // doesn't know about any of the RESTEasy JARs.  So here we're temporarily setting the
    // context classloader to the s-ramp wagon extension's classloader, which should have access
    // to all the right stuff.
    ClassLoader oldCtxCL = Thread.currentThread().getContextClassLoader();
    Thread.currentThread().setContextClassLoader(SrampWagon.class.getClassLoader());
    try {
      // Query the artifact meta data using GAV info
      BaseArtifactType artifact = findExistingArtifact(client, gavInfo);
      if (artifact == null)
        throw new ResourceDoesNotExistException(
            Messages.i18n.format("ARTIFACT_NOT_FOUND", gavInfo.getName())); // $NON-NLS-1$
      this.archive.addEntry(gavInfo.getFullName(), artifact, null);
      ArtifactType type = ArtifactType.valueOf(artifact);

      // Get the artifact content as an input stream
      InputStream artifactContent = client.getArtifactContent(type, artifact.getUuid());
      inputData.setInputStream(artifactContent);
    } catch (ResourceDoesNotExistException e) {
      throw e;
    } catch (SrampClientException e) {
      if (e.getCause() instanceof HttpHostConnectException) {
        this.debug(Messages.i18n.format("SRAMP_CONNECTION_FAILED", e.getMessage())); // $NON-NLS-1$
      } else {
        this.error(e.getMessage(), e);
      }
      throw new ResourceDoesNotExistException(
          Messages.i18n.format(
              "FAILED_TO_GET_RESOURCE_FROM_SRAMP", gavInfo.getName())); // $NON-NLS-1$
    } catch (Throwable t) {
      this.error(t.getMessage(), t);
    } finally {
      Thread.currentThread().setContextClassLoader(oldCtxCL);
    }
  }
Exemple #15
0
  @Test
  public void testPersistArtifact_ExtendedArtifactType() throws Exception {
    ExtendedArtifactType extendedArtifact = new ExtendedArtifactType();
    extendedArtifact.setArtifactType(BaseArtifactEnum.EXTENDED_ARTIFACT_TYPE);
    extendedArtifact.setExtendedType("FooArtifactType");
    extendedArtifact.setName("MyExtendedArtifact");
    extendedArtifact.setDescription("This is a simple description for testing.");

    BaseArtifactType artifact = persistenceManager.persistArtifact(extendedArtifact, null);
    Assert.assertNotNull(artifact);
    log.info("persisted extended artifact to JCR, returned artifact uuid=" + artifact.getUuid());

    // print out the derived node
    if (log.isDebugEnabled()) {
      persistenceManager.printArtifactGraph(artifact.getUuid(), ArtifactType.XmlDocument());
    }
    Assert.assertEquals(ExtendedArtifactType.class, artifact.getClass());

    String name = ((ExtendedArtifactType) artifact).getName();
    String description = ((ExtendedArtifactType) artifact).getDescription();

    Assert.assertEquals("MyExtendedArtifact", name);
    Assert.assertEquals("This is a simple description for testing.", description);
  }
Exemple #16
0
  /**
   * 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);
    }
  }
  private String uploadArtifact(MavenMetaData metadata, InputStream content)
      throws MavenRepositoryException {
    String uuid = null;
    if (content == null) {
      throw new MavenRepositoryException(
          Messages.i18n.format("maven.resource.upload.no.content")); // $NON-NLS-1$
    }
    String fileName = metadata.getFileName();
    PersistenceManager persistenceManager = PersistenceFactory.newInstance();

    // We need to query firstly to check if there is an existing item. If
    // there is an existing item, then it would be updated
    // Adding the criterias and parameters
    List<String> criteria = new ArrayList<String>();
    List<Object> parameters = new ArrayList<Object>();
    criteria.add("@maven.artifactId = ?"); // $NON-NLS-1$
    criteria.add("@maven.groupId = ?"); // $NON-NLS-1$
    criteria.add("@maven.type = ?"); // $NON-NLS-1$

    parameters.add(metadata.getArtifactId());
    parameters.add(metadata.getGroupId());
    if (StringUtils.isNotBlank(metadata.getParentType())) {
      parameters.add(metadata.getParentType());
    } else {
      parameters.add(metadata.getType());
    }

    if (StringUtils.isNotBlank(metadata.getVersion())) {
      criteria.add("@maven.version = ?"); // $NON-NLS-1$
      parameters.add(metadata.getVersion());
    } else {
      criteria.add("xp2:not(@maven.version)"); // $NON-NLS-1$
    }
    if (StringUtils.isNotBlank(metadata.getParentFileName())) {
      criteria.add("@name = ?"); // $NON-NLS-1$
      parameters.add(metadata.getParentFileName());
    }

    if (StringUtils.isNotBlank(metadata.getSnapshotId())) {
      criteria.add("@maven.snapshot.id = ?"); // $NON-NLS-1$
      parameters.add(metadata.getSnapshotId());
    } else {
      criteria.add("xp2:not(@maven.snapshot.id)"); // $NON-NLS-1$
    }

    ArtifactSet artifactSet = null;
    BaseArtifactType baseArtifact = null;
    try {
      // Query the previous criterias
      artifactSet = query(criteria, parameters);
      if (artifactSet.size() >= 1) {
        // Found some content!
        baseArtifact = artifactSet.iterator().next();
      }
    } catch (SrampAtomException e) {
      throw new MavenRepositoryException(
          Messages.i18n.format("maven.resource.upload.sramp.query.error", metadata.toString()),
          e); //$NON-NLS-1$
    } finally {
      if (artifactSet != null) {
        artifactSet.close();
      }
    }
    if (MavenFileExtensionEnum.value(metadata.getType()) != null) {
      if (baseArtifact != null) {
        boolean update = false;
        ArtifactType artifactType = ArtifactType.valueOf(baseArtifact.getArtifactType());
        if (metadata.getType().equals(MavenFileExtensionEnum.HASH_MD5.getExtension())
            || metadata.getType().equals(MavenFileExtensionEnum.HASH_SHA1.getExtension())) {
          String content_value = ""; // $NON-NLS-1$
          try {
            content_value = IOUtils.toString(content);
          } catch (IOException e1) {
            throw new MavenRepositoryException(
                Messages.i18n.format("maven.resource.upload.sramp.error", metadata.toString()),
                e1); //$NON-NLS-1$
          }

          if (StringUtils.isNotBlank(content_value)) {
            if (metadata.getType().equals(MavenFileExtensionEnum.HASH_MD5.getExtension())) {
              SrampModelUtils.setCustomProperty(
                  baseArtifact, JavaModel.PROP_MAVEN_HASH_MD5, content_value);
              update = true;
            } else if (metadata.getType().equals(MavenFileExtensionEnum.HASH_SHA1.getExtension())) {
              SrampModelUtils.setCustomProperty(
                  baseArtifact, JavaModel.PROP_MAVEN_HASH_SHA1, content_value);
              update = true;
            }
            if (update) {

              try {
                persistenceManager.updateArtifact(baseArtifact, artifactType);
              } catch (SrampException e) {
                throw new MavenRepositoryException(
                    Messages.i18n.format("maven.resource.upload.sramp.error", metadata.toString()),
                    e); //$NON-NLS-1$
              }
            }
          }
        } else {
          try {
            persistenceManager.updateArtifactContent(baseArtifact.getUuid(), artifactType, content);
          } catch (SrampException e) {
            throw new MavenRepositoryException(
                Messages.i18n.format("maven.resource.upload.sramp.error", metadata.toString()),
                e); //$NON-NLS-1$
          }
        }
      }
    } else {
      BaseArtifactType persisted = null;
      // If there is an existing artifact in s-ramp it would be updaded
      // with the new content
      if (baseArtifact != null) {
        if (metadata.isSnapshotVersion()
            || metadata.getFileName().equals("maven-metadata.xml")) { // $NON-NLS-1$
          ArtifactType artifactType = ArtifactType.valueOf(baseArtifact);
          try {
            persistenceManager.updateArtifactContent(baseArtifact.getUuid(), artifactType, content);
          } catch (SrampException e) {
            throw new MavenRepositoryException(
                Messages.i18n.format(
                    "maven.resource.upload.sramp.update.content.error", //$NON-NLS-1$
                    baseArtifact.getUuid()),
                e);
          }
          persisted = baseArtifact;
        } else {
          throw new MavenRepositoryException(
              Messages.i18n.format(
                  "maven.resource.upload.sramp.release.artifact.exist", //$NON-NLS-1$
                  metadata.getFullName()));
        }

      } else {
        // we need to create a new artifact in s-ramp and persist the
        // content
        ArtifactType artifactType = determineArtifactType(fileName);
        BaseArtifactType baseArtifactType = artifactType.newArtifactInstance();
        try {
          persisted = persistenceManager.persistArtifact(baseArtifactType, content);
        } catch (SrampException e1) {
          throw new MavenRepositoryException(
              Messages.i18n.format("maven.resource.upload.sramp.new.content.error"),
              e1); //$NON-NLS-1$
        }
      }
      // Store the metadata to the persisted artifact
      SrampModelUtils.setCustomProperty(
          persisted, JavaModel.PROP_MAVEN_GROUP_ID, metadata.getGroupId());
      SrampModelUtils.setCustomProperty(
          persisted, JavaModel.PROP_MAVEN_ARTIFACT_ID, metadata.getArtifactId());
      SrampModelUtils.setCustomProperty(
          persisted, JavaModel.PROP_MAVEN_VERSION, metadata.getVersion());

      if (StringUtils.isNotBlank(metadata.getClassifier())) {
        SrampModelUtils.setCustomProperty(
            persisted, JavaModel.PROP_MAVEN_CLASSIFIER, metadata.getClassifier());
      }
      if (StringUtils.isNotBlank(metadata.getType())) {
        SrampModelUtils.setCustomProperty(persisted, JavaModel.PROP_MAVEN_TYPE, metadata.getType());
      }
      if (StringUtils.isNotBlank(metadata.getSnapshotId())) {
        SrampModelUtils.setCustomProperty(
            persisted, JavaModel.PROP_MAVEN_SNAPSHOT_ID, metadata.getSnapshotId());
      }
      try {
        // Persist the content size, because it will be required when
        // reading
        persisted
            .getOtherAttributes()
            .put(SrampConstants.SRAMP_CONTENT_SIZE_QNAME, content.available() + ""); // $NON-NLS-1$
      } catch (IOException e) {
        logger.error(""); // $NON-NLS-1$
      }

      persisted.setName(metadata.getFileName());
      ArtifactType artifactType = ArtifactType.valueOf(persisted);
      try {
        persistenceManager.updateArtifact(persisted, artifactType);
      } catch (SrampException e) {
        throw new MavenRepositoryException(
            Messages.i18n.format(
                "maven.resource.upload.sramp.update.content.metadata.error", //$NON-NLS-1$
                persisted.getUuid()),
            e);
      }
      uuid = persisted.getUuid();
    }

    return uuid;
  }
  private MavenArtifactWrapper getArtifactContent(MavenMetaData metadata)
      throws MavenRepositoryException {
    // List of criterias and the parameters associated
    List<String> criteria = new ArrayList<String>();
    List<Object> parameters = new ArrayList<Object>();
    criteria.add("@maven.artifactId = ?"); // $NON-NLS-1$
    criteria.add("@maven.groupId = ?"); // $NON-NLS-1$
    criteria.add("@maven.type = ?"); // $NON-NLS-1$

    parameters.add(metadata.getArtifactId());
    parameters.add(metadata.getGroupId());
    // If there is a parent type (in case of sha1 or md5, it is passed as
    // parameter
    if (StringUtils.isNotBlank(metadata.getParentType())) {
      parameters.add(metadata.getParentType());
    } else {
      parameters.add(metadata.getType());
    }
    // Not always it is passed the maven version. This is the case when it
    // is requested a file (normally maven-metadata.xml) that is stored in
    // the artifact subfolder
    if (StringUtils.isNotBlank(metadata.getVersion())) {
      criteria.add("@maven.version = ?"); // $NON-NLS-1$
      parameters.add(metadata.getVersion());
    }
    // If it is included a classfier it is added as parameter.
    if (StringUtils.isNotBlank(metadata.getClassifier())) {
      criteria.add("@maven.classifier = ?"); // $NON-NLS-1$
      parameters.add(metadata.getClassifier());
    } else {
      criteria.add("xp2:not(@maven.classifier)"); // $NON-NLS-1$
    }

    if (StringUtils.isNotBlank(metadata.getSnapshotId())) {
      criteria.add("@maven.snapshot.id = ?"); // $NON-NLS-1$
      parameters.add(metadata.getSnapshotId());
    } else {
      criteria.add("xp2:not(@maven.snapshot.id)"); // $NON-NLS-1$
    }

    ArtifactSet artifactSet = null;
    BaseArtifactType baseArtifact = null;
    try {
      // query based on the previous criterias
      artifactSet = query(criteria, parameters);
      if (artifactSet.size() >= 1) {
        // Found some content!
        baseArtifact = artifactSet.iterator().next();
      }
    } catch (SrampAtomException e) {
      throw new MavenRepositoryException(Messages.i18n.format(""), e); // $NON-NLS-1$
    } finally {
      if (artifactSet != null) {
        artifactSet.close();
      }
    }
    // If the artifact returned is not null, then the content will be
    // retrieved
    if (baseArtifact != null) {
      PersistenceManager persistenceManager = PersistenceFactory.newInstance();
      final InputStream artifactContent;
      ArtifactType artifactType = ArtifactType.valueOf(baseArtifact.getArtifactType());
      Date lastModifiedDate = null;
      if (baseArtifact.getLastModifiedTimestamp() != null) {
        lastModifiedDate = baseArtifact.getLastModifiedTimestamp().toGregorianCalendar().getTime();
      }
      int contentLength = -1;
      MavenFileExtensionEnum ext = MavenFileExtensionEnum.value(metadata.getType());
      if (ext != null && StringUtils.isNotBlank(ext.getCustomProperty())) {
        // we need to set the input stream with the value of the custom
        // property
        String content = SrampModelUtils.getCustomProperty(baseArtifact, ext.getCustomProperty());
        if (StringUtils.isNotBlank(content)) {
          artifactContent = new ByteArrayInputStream(content.getBytes());
          contentLength = content.length();
        } else {
          logger.info(
              Messages.i18n.format(
                  "maven.resource.get.subcontent.not.found",
                  baseArtifact.getUuid(),
                  ext.getCustomProperty())); // $NON-NLS-1$
          return null;
        }

      } else {
        // we need to set the input stream with the artifact content
        try {
          artifactContent =
              persistenceManager.getArtifactContent(baseArtifact.getUuid(), artifactType);
        } catch (SrampException e) {
          logger.error(
              Messages.i18n.format("maven.resource.get.content.error", baseArtifact.getUuid()),
              e); //$NON-NLS-1$

          throw new MavenRepositoryException(
              Messages.i18n.format(
                  "maven.resource.get.content.error", //$NON-NLS-1$
                  baseArtifact.getUuid()),
              e);
        }
        String contentSize =
            baseArtifact.getOtherAttributes().get(SrampConstants.SRAMP_CONTENT_SIZE_QNAME);
        if (StringUtils.isNotBlank(contentSize)) {
          contentLength = Integer.parseInt(contentSize);
        }
      }

      MavenArtifactWrapper wrapper =
          new MavenArtifactWrapper(
              artifactContent,
              contentLength,
              lastModifiedDate,
              metadata.getFileName(),
              artifactType.getMimeType());
      return wrapper;
    } else {
      logger.error(
          Messages.i18n.format("maven.resource.item.null", metadata.toString())); // $NON-NLS-1$
      // Return null so that the servlet can return a 404
      return null;
    }
  }
Exemple #19
0
  /**
   * Tests that we can manage s-ramp properties.
   *
   * @throws Exception
   */
  @Test
  public void testUpdateProperties() throws Exception {
    // First, add an artifact to the repo
    String artifactFileName = "PO.xsd";
    InputStream POXsd =
        this.getClass().getResourceAsStream("/sample-files/xsd/" + artifactFileName);
    Document document = new Document();
    document.setName(artifactFileName);
    document.setArtifactType(BaseArtifactEnum.XSD_DOCUMENT);
    BaseArtifactType artifact = persistenceManager.persistArtifact(document, POXsd);
    Assert.assertNotNull(artifact);
    log.info("persisted PO.xsd to JCR, returned artifact uuid=" + artifact.getUuid());
    Assert.assertEquals(XsdDocument.class, artifact.getClass());
    long size = ((DocumentArtifactType) artifact).getContentSize();
    Assert.assertTrue(
        size
            >= 2376L); // Not doing an equals here due to the vagaries of Windows vs *nix line
                       // endings

    // Now update the artifact
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.XsdDocument());
    Assert.assertTrue("Expected 0 properties.", artifact.getProperty().isEmpty());
    Property prop1 = new Property();
    prop1.setPropertyName("prop1");
    prop1.setPropertyValue("propval1");
    artifact.getProperty().add(prop1);
    Property prop2 = new Property();
    prop2.setPropertyName("prop2");
    prop2.setPropertyValue("propval2");
    artifact.getProperty().add(prop2);
    persistenceManager.updateArtifact(artifact, ArtifactType.XsdDocument());

    // Now verify that the properties were stored
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.XsdDocument());
    Assert.assertTrue("Expected 2 properties.", artifact.getProperty().size() == 2);
    String p1 =
        artifact.getProperty().get(0).getPropertyName()
            + "="
            + artifact.getProperty().get(0).getPropertyValue();
    String p2 =
        artifact.getProperty().get(1).getPropertyName()
            + "="
            + artifact.getProperty().get(1).getPropertyValue();
    Set<String> ps = new HashSet<String>();
    ps.add(p1);
    ps.add(p2);
    Assert.assertTrue("Prop1 missing from properties.", ps.contains("prop1=propval1"));
    Assert.assertTrue("Prop2 missing from properties.", ps.contains("prop2=propval2"));
    Assert.assertFalse("Prop3 somehow existed!.", ps.contains("prop3=propval3"));

    // Now remove one property, add another one, and change the value of one
    artifact.getProperty().clear();
    prop1 = new Property();
    prop1.setPropertyName("prop1");
    prop1.setPropertyValue("propval1-updated");
    artifact.getProperty().add(prop1);
    Property prop3 = new Property();
    prop3.setPropertyName("prop3");
    prop3.setPropertyValue("propval3");
    artifact.getProperty().add(prop3);
    persistenceManager.updateArtifact(artifact, ArtifactType.XsdDocument());

    // Now verify that the properties were updated
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.XsdDocument());
    Assert.assertTrue("Expected 2 properties.", artifact.getProperty().size() == 2);
    p1 =
        artifact.getProperty().get(0).getPropertyName()
            + "="
            + artifact.getProperty().get(0).getPropertyValue();
    p2 =
        artifact.getProperty().get(1).getPropertyName()
            + "="
            + artifact.getProperty().get(1).getPropertyValue();
    ps.clear();
    ps.add(p1);
    ps.add(p2);
    Assert.assertFalse("Prop1 wasn't updated (old value detected).", ps.contains("prop1=propval1"));
    Assert.assertTrue(
        "Prop1 wasn't updated (new value not found).", ps.contains("prop1=propval1-updated"));
    Assert.assertFalse("Prop2 existed unexpectedly.", ps.contains("prop2=propval2"));
    Assert.assertTrue("Prop3 missing from properties.", ps.contains("prop3=propval3"));
  }
Exemple #20
0
  /**
   * Tests that we can manage s-ramp properties on a /core/Document.
   *
   * @throws Exception
   */
  @Test
  public void testUpdateProperties_Document() throws Exception {
    // First, add an artifact to the repo
    String artifactFileName = "s-ramp-press-release.pdf";
    InputStream pdf = this.getClass().getResourceAsStream("/sample-files/core/" + artifactFileName);

    Document document = new Document();
    document.setName(artifactFileName);
    document.setContentType("application/pdf");
    document.setArtifactType(BaseArtifactEnum.DOCUMENT);
    BaseArtifactType artifact = persistenceManager.persistArtifact(document, pdf);
    Assert.assertNotNull(artifact);
    log.info("persisted PDF to JCR, returned artifact uuid=" + artifact.getUuid());
    Assert.assertEquals(Document.class, artifact.getClass());
    Assert.assertEquals(new Long(18873l), ((DocumentArtifactType) artifact).getContentSize());

    // Now update the artifact
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.Document());
    Assert.assertTrue("Expected 0 properties.", artifact.getProperty().isEmpty());
    Property prop1 = new Property();
    prop1.setPropertyName("prop1");
    prop1.setPropertyValue("propval1");
    artifact.getProperty().add(prop1);
    Property prop2 = new Property();
    prop2.setPropertyName("prop2");
    prop2.setPropertyValue("propval2");
    artifact.getProperty().add(prop2);
    persistenceManager.updateArtifact(artifact, ArtifactType.Document());

    // Now verify that the properties were stored
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.Document());
    Assert.assertTrue("Expected 2 properties.", artifact.getProperty().size() == 2);
    String p1 =
        artifact.getProperty().get(0).getPropertyName()
            + "="
            + artifact.getProperty().get(0).getPropertyValue();
    String p2 =
        artifact.getProperty().get(1).getPropertyName()
            + "="
            + artifact.getProperty().get(1).getPropertyValue();
    Set<String> ps = new HashSet<String>();
    ps.add(p1);
    ps.add(p2);
    Assert.assertTrue("Prop1 missing from properties.", ps.contains("prop1=propval1"));
    Assert.assertTrue("Prop2 missing from properties.", ps.contains("prop2=propval2"));
    Assert.assertFalse("Prop3 somehow existed!.", ps.contains("prop3=propval3"));

    // Now remove one property, add another one, and change the value of one
    artifact.getProperty().clear();
    prop1 = new Property();
    prop1.setPropertyName("prop1");
    prop1.setPropertyValue("propval1-updated");
    artifact.getProperty().add(prop1);
    Property prop3 = new Property();
    prop3.setPropertyName("prop3");
    prop3.setPropertyValue("propval3");
    artifact.getProperty().add(prop3);
    persistenceManager.updateArtifact(artifact, ArtifactType.Document());

    // Now verify that the properties were updated
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.Document());
    Assert.assertTrue("Expected 2 properties.", artifact.getProperty().size() == 2);
    p1 =
        artifact.getProperty().get(0).getPropertyName()
            + "="
            + artifact.getProperty().get(0).getPropertyValue();
    p2 =
        artifact.getProperty().get(1).getPropertyName()
            + "="
            + artifact.getProperty().get(1).getPropertyValue();
    ps.clear();
    ps.add(p1);
    ps.add(p2);
    Assert.assertFalse("Prop1 wasn't updated (old value detected).", ps.contains("prop1=propval1"));
    Assert.assertTrue(
        "Prop1 wasn't updated (new value not found).", ps.contains("prop1=propval1-updated"));
    Assert.assertFalse("Prop2 existed unexpectedly.", ps.contains("prop2=propval2"));
    Assert.assertTrue("Prop3 missing from properties.", ps.contains("prop3=propval3"));
  }
 /**
  * {@inheritDoc}
  *
  * @see
  *     org.overlord.sramp.atom.archive.expand.registry.ZipToSrampArchiveProvider#accept(org.overlord.sramp.common.ArtifactType)
  */
 @Override
 public boolean accept(final ArtifactType artifactType) {
   return (artifactType.isExtendedType()
       && Vdb.ARTIFACT_TYPE.equals(artifactType.getExtendedType()));
 }
Exemple #22
0
  /**
   * 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);
    }
  }
Exemple #23
0
  /**
   * Tests that we can manage s-ramp properties.
   *
   * @throws Exception
   */
  @Test
  public void testGenericRelationships() throws Exception {
    String uuid1 = null;
    String uuid2 = null;
    String uuid3 = null;

    // First, add an artifact to the repo
    String artifactFileName = "PO.xsd";
    InputStream contentStream =
        this.getClass().getResourceAsStream("/sample-files/xsd/" + artifactFileName);
    Document document = new Document();
    document.setName(artifactFileName);
    document.setArtifactType(BaseArtifactEnum.XSD_DOCUMENT);
    BaseArtifactType artifact = persistenceManager.persistArtifact(document, contentStream);
    Assert.assertNotNull(artifact);
    uuid1 = artifact.getUuid();
    contentStream.close();

    // Now update the artifact's generic relationships
    artifact = persistenceManager.getArtifact(uuid1, ArtifactType.XsdDocument());
    Assert.assertTrue("Expected 0 relationships.", artifact.getRelationship().isEmpty());
    SrampModelUtils.addGenericRelationship(artifact, "NoTargetRelationship", null);
    persistenceManager.updateArtifact(artifact, ArtifactType.XsdDocument());

    // Now verify that the relationship was stored
    artifact = persistenceManager.getArtifact(artifact.getUuid(), ArtifactType.XsdDocument());
    Assert.assertEquals("Expected 1 relationship.", 1, artifact.getRelationship().size());
    Assert.assertEquals(
        "NoTargetRelationship", artifact.getRelationship().get(0).getRelationshipType());
    Assert.assertEquals(
        Collections.EMPTY_LIST, artifact.getRelationship().get(0).getRelationshipTarget());

    // Add a second artifact.
    artifactFileName = "XMLSchema.xsd";
    contentStream = this.getClass().getResourceAsStream("/sample-files/xsd/" + artifactFileName);
    Document document2 = new Document();
    document2.setName(artifactFileName);
    document2.setArtifactType(BaseArtifactEnum.XSD_DOCUMENT);
    BaseArtifactType artifact2 = persistenceManager.persistArtifact(document2, contentStream);
    Assert.assertNotNull(artifact2);
    uuid2 = artifact2.getUuid();

    // Add a second relationship, this time with a target.
    SrampModelUtils.addGenericRelationship(artifact, "TargetedRelationship", uuid2);
    persistenceManager.updateArtifact(artifact, ArtifactType.XsdDocument());

    // Now verify that the targeted relationship was stored
    artifact = persistenceManager.getArtifact(uuid1, ArtifactType.XsdDocument());
    Assert.assertEquals("Expected 2 relationships.", 2, artifact.getRelationship().size());
    Relationship relationship =
        SrampModelUtils.getGenericRelationship(artifact, "NoTargetRelationship");
    Assert.assertNotNull(relationship);
    Assert.assertEquals("NoTargetRelationship", relationship.getRelationshipType());
    Assert.assertEquals(Collections.EMPTY_LIST, relationship.getRelationshipTarget());
    relationship = SrampModelUtils.getGenericRelationship(artifact, "TargetedRelationship");
    Assert.assertNotNull(relationship);
    Assert.assertEquals("TargetedRelationship", relationship.getRelationshipType());
    Assert.assertEquals(1, relationship.getRelationshipTarget().size()); // has only one target
    Assert.assertEquals(uuid2, relationship.getRelationshipTarget().get(0).getValue());

    // Add a third artifact.
    artifactFileName = "PO.xml";
    contentStream = this.getClass().getResourceAsStream("/sample-files/core/" + artifactFileName);
    contentStream = this.getClass().getResourceAsStream("/sample-files/core/" + artifactFileName);
    Document document3 = new Document();
    document3.setName(artifactFileName);
    document3.setArtifactType(BaseArtifactEnum.XML_DOCUMENT);
    BaseArtifactType artifact3 = persistenceManager.persistArtifact(document3, contentStream);
    Assert.assertNotNull(artifact3);
    uuid3 = artifact3.getUuid();

    // Add a third relationship, again with a target.
    SrampModelUtils.addGenericRelationship(artifact, "TargetedRelationship", uuid3);
    persistenceManager.updateArtifact(artifact, ArtifactType.XsdDocument());

    // More verifications
    artifact = persistenceManager.getArtifact(uuid1, ArtifactType.XsdDocument());
    Assert.assertEquals("Expected 2 relationships.", 2, artifact.getRelationship().size());
    relationship = SrampModelUtils.getGenericRelationship(artifact, "NoTargetRelationship");
    Assert.assertNotNull(relationship);
    Assert.assertEquals("NoTargetRelationship", relationship.getRelationshipType());
    Assert.assertEquals(Collections.EMPTY_LIST, relationship.getRelationshipTarget());
    relationship = SrampModelUtils.getGenericRelationship(artifact, "TargetedRelationship");
    Assert.assertNotNull(relationship);
    Assert.assertEquals("TargetedRelationship", relationship.getRelationshipType());
    Assert.assertEquals(2, relationship.getRelationshipTarget().size());
    Set<String> expected = new HashSet<String>();
    Set<String> actual = new HashSet<String>();
    expected.add(uuid2);
    expected.add(uuid3);
    actual.add(relationship.getRelationshipTarget().get(0).getValue());
    actual.add(relationship.getRelationshipTarget().get(1).getValue());
    Assert.assertEquals(expected, actual);

    // Add a fourth (bogus) relationship
    SrampModelUtils.addGenericRelationship(artifact, "TargetedRelationship", "not-a-valid-uuid");
    try {
      persistenceManager.updateArtifact(artifact, ArtifactType.XsdDocument());
      Assert.fail("Expected an update failure.");
    } catch (Exception e) {
      Assert.assertEquals(ArtifactNotFoundException.class, e.getClass());
      Assert.assertEquals("No artifact found with UUID: not-a-valid-uuid", e.getMessage());
    }
  }