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