/** * Mule Development Kit * Copyright 2010-2011 (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mule.devkit.dynamic.browsing; import org.mule.devkit.dynamic.api.helper.Reflections; import org.sonatype.nexus.client.NexusClient; import org.sonatype.nexus.client.NexusClientException; import org.sonatype.nexus.client.NexusConnectionException; import org.sonatype.nexus.client.rest.NexusRestClient; import org.sonatype.nexus.rest.model.NexusArtifact; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; public class NexusBrowser { private final String nexusUrl; private static final String DEFAULT_NEXUS_URL = "https://repository.mulesoft.org/nexus/"; private static final String DEFAULT_GROUPD_ID = "org.mule.modules"; private static final String DEFAULT_PACKAGING = "mule-module"; private static final String CLIENT_HELPER_FIELD_NAME = "clientHelper"; private static final String CHALLENGE_FIELD_NAME = "challenge"; public NexusBrowser() { this(NexusBrowser.DEFAULT_NEXUS_URL); } public NexusBrowser(final String nexusUrl) { this.nexusUrl = nexusUrl; } protected final NexusClient createConnectedClient(final String url) throws NexusClientException, NexusConnectionException { final NexusClient client = new NexusRestClient(); client.connect(url, null, null); Reflections.set(Reflections.get(client, NexusBrowser.CLIENT_HELPER_FIELD_NAME), NexusBrowser.CHALLENGE_FIELD_NAME, null); return client; } protected final List<NexusArtifact> getMatchingGroup(final NexusArtifact artifact, final List<List<NexusArtifact>> allGroups) { List<NexusArtifact> matchingGroup = null; for (final List<NexusArtifact> group : allGroups) { final NexusArtifact template = group.get(0); if (template.getArtifactId().equals(artifact.getArtifactId()) && template.getGroupId().equals(template.getGroupId())) { matchingGroup = group; break; } } if ( matchingGroup == null) { matchingGroup = new LinkedList<NexusArtifact>(); allGroups.add(matchingGroup); } return matchingGroup; } public final Set<String> listArtifactIds() throws Exception { return listArtifactIds(NexusBrowser.DEFAULT_GROUPD_ID, NexusBrowser.DEFAULT_PACKAGING); } public final Set<String> listArtifactIds(final String groupId, final String packaging) throws NexusClientException, NexusConnectionException { final NexusArtifact template = new NexusArtifact(); template.setGroupId(groupId); template.setPackaging(packaging); final Set<String> allArtifactIds = new HashSet<String>(); final NexusClient client = createConnectedClient(this.nexusUrl); try { final List<NexusArtifact> artifacts = client.searchByGAV(template); for (final NexusArtifact artifact : artifacts) { allArtifactIds.add(artifact.getArtifactId()); } return allArtifactIds; } finally { client.disconnect(); } } public final List<List<NexusArtifact>> listArtifacts() throws NexusClientException, NexusConnectionException { return listArtifacts(NexusBrowser.DEFAULT_GROUPD_ID, NexusBrowser.DEFAULT_PACKAGING); } public final List<List<NexusArtifact>> listArtifacts(final String groupId, final String packaging) throws NexusClientException, NexusConnectionException { final NexusArtifact template = new NexusArtifact(); template.setGroupId(groupId); template.setPackaging(packaging); final List<List<NexusArtifact>> allGroups = new LinkedList<List<NexusArtifact>>(); final NexusClient client = createConnectedClient(this.nexusUrl); try { final List<NexusArtifact> artifacts = client.searchByGAV(template); for (final NexusArtifact artifact : artifacts) { final List<NexusArtifact> group = getMatchingGroup(artifact, allGroups); group.add(artifact); } return allGroups; } finally { client.disconnect(); } } public final Set<String> listArtifactVersions(final String artifactId) throws Exception { return listArtifactVersions(NexusBrowser.DEFAULT_GROUPD_ID, artifactId, NexusBrowser.DEFAULT_PACKAGING); } public final Set<String> listArtifactVersions(final String groupId, final String artifactId, final String packaging) throws NexusClientException, NexusConnectionException { final NexusArtifact template = new NexusArtifact(); template.setGroupId(groupId); template.setArtifactId(artifactId); template.setPackaging(packaging); final Set<String> versions = new HashSet<String>(); final NexusClient client = createConnectedClient(this.nexusUrl); try { final List<NexusArtifact> artifacts = client.searchByGAV(template); for (final NexusArtifact artifact : artifacts) { versions.add(artifact.getVersion()); } return versions; } finally { client.disconnect(); } } }