org.bimserver.plugins.MavenPluginLocation Maven / Gradle / Ivy
package org.bimserver.plugins;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.eclipse.aether.impl.DefaultServiceLocator;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.VersionRangeRequest;
import org.eclipse.aether.resolution.VersionRangeResolutionException;
import org.eclipse.aether.resolution.VersionRangeResult;
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
import org.eclipse.aether.transport.file.FileTransporterFactory;
import org.eclipse.aether.transport.http.HttpTransporterFactory;
import org.eclipse.aether.version.Version;
public class MavenPluginLocation extends PluginLocation {
private String defaultrepository;
private String groupId;
private String artifactId;
public MavenPluginLocation(String defaultrepository, String groupId, String artifactId) {
this.defaultrepository = defaultrepository;
this.groupId = groupId;
this.artifactId = artifactId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public void setArtifactId(String artifactId) {
this.artifactId = artifactId;
}
public String getArtifactId() {
return artifactId;
}
public String getGroupId() {
return groupId;
}
@Override
public String toString() {
return groupId + "." + artifactId;
}
@Override
public List getAllVersions() {
List pluginVersions = new ArrayList<>();
RepositorySystem system = newRepositorySystem();
RepositorySystemSession session = newRepositorySystemSession(system);
Artifact artifact = new DefaultArtifact(groupId + ":" + artifactId + ":[0,)");
VersionRangeRequest rangeRequest = new VersionRangeRequest();
rangeRequest.setArtifact(artifact);
rangeRequest.setRepositories(newRepositories(system, session));
VersionRangeResult rangeResult;
try {
rangeResult = system.resolveVersionRange(session, rangeRequest);
List versions = rangeResult.getVersions();
for (Version version : versions) {
System.out.println(version);
}
} catch (VersionRangeResolutionException e) {
e.printStackTrace();
}
return pluginVersions;
}
public RepositorySystem newRepositorySystem() {
/*
* Aether's components implement org.eclipse.aether.spi.locator.Service
* to ease manual wiring and using the prepopulated
* DefaultServiceLocator, we only need to register the repository
* connector and transporter factories.
*/
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
locator.addService(TransporterFactory.class, FileTransporterFactory.class);
locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
locator.setErrorHandler(new DefaultServiceLocator.ErrorHandler() {
@Override
public void serviceCreationFailed(Class> type, Class> impl, Throwable exception) {
exception.printStackTrace();
}
});
return locator.getService(RepositorySystem.class);
}
public DefaultRepositorySystemSession newRepositorySystemSession(RepositorySystem system) {
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
LocalRepository localRepo = new LocalRepository("target/local-repo");
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
session.setTransferListener(new ConsoleTransferListener());
session.setRepositoryListener(new ConsoleRepositoryListener());
// uncomment to generate dirty trees
// session.setDependencyGraphTransformer( null );
return session;
}
public List newRepositories(RepositorySystem system, RepositorySystemSession session) {
return new ArrayList(Arrays.asList(newCentralRepository()));
}
private RemoteRepository newCentralRepository() {
return new RemoteRepository.Builder("central", "default", defaultrepository).build();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy