Revision: 19187
http://sourceforge.net/p/gate/code/19187
Author: markagreenwood
Date: 2016-04-03 08:56:16 +0000 (Sun, 03 Apr 2016)
Log Message:
-----------
hackety hack hack hack! this does allow us to load a plugin from maven but it's
horribly hacky as it has to work around the plugin is a directory issue; that
idea is next for the chopping block
Modified Paths:
--------------
gate/branches/sawdust2/ivy.xml
gate/branches/sawdust2/src/main/gate/Gate.java
gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java
gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java
Modified: gate/branches/sawdust2/ivy.xml
===================================================================
--- gate/branches/sawdust2/ivy.xml 2016-04-03 01:21:58 UTC (rev 19186)
+++ gate/branches/sawdust2/ivy.xml 2016-04-03 08:56:16 UTC (rev 19187)
@@ -21,6 +21,18 @@
</configurations>
<dependencies>
+
+ <!-- the Aether stuff for dependency resolution - odd to have this in an ivy
file! -->
+ <dependency org="org.eclipse.aether" name="aether-api" rev="1.1.0" />
+ <dependency org="org.eclipse.aether" name="aether-util" rev="1.1.0" />
+ <dependency org="org.eclipse.aether" name="aether-impl" rev="1.1.0" />
+ <dependency org="org.eclipse.aether" name="aether-connector-basic"
rev="1.1.0" />
+ <dependency org="org.eclipse.aether" name="aether-transport-file"
rev="1.1.0" />
+ <dependency org="org.eclipse.aether" name="aether-transport-http"
rev="1.1.0" />
+ <dependency org="org.eclipse.aether" name="aether-transport-wagon"
rev="1.1.0" />
+ <dependency org="org.apache.maven" name="maven-aether-provider"
rev="3.3.9" />
+ <dependency org="org.apache.maven.wagon" name="wagon-ssh" rev="2.10" />
+
<!-- things that we repackage under an alternative package name -->
<dependency org="uk.ac.gate" name="gate-asm" rev="5.0.3"
conf="required->master" />
<dependency org="uk.ac.gate" name="gate-compiler-jdt"
rev="4.3.2-P20140317-1600" conf="required->master" />
@@ -134,6 +146,9 @@
<exclude org="xml-apis" module="xml-apis" />
<exclude org="stax" module="stax-api" />
<exclude org="org.apache.geronimo.specs"
module="geronimo-stax-api_1.0_spec" />
+
+
+
</dependencies>
</ivy-module>
Modified: gate/branches/sawdust2/src/main/gate/Gate.java
===================================================================
--- gate/branches/sawdust2/src/main/gate/Gate.java 2016-04-03 01:21:58 UTC
(rev 19186)
+++ gate/branches/sawdust2/src/main/gate/Gate.java 2016-04-03 08:56:16 UTC
(rev 19187)
@@ -1228,6 +1228,17 @@
return dInfo;
}
+ public static DirectoryInfo getDirectoryInfo(URL directory,
org.jdom.Document creoleDoc) {
+ directory = normaliseCreoleUrl(directory);
+ if(!knownPlugins.contains(directory)) return null;
+ DirectoryInfo dInfo = pluginData.get(directory);
+ if(dInfo == null) {
+ dInfo = new DirectoryInfo(directory, creoleDoc);
+ pluginData.put(directory, dInfo);
+ }
+ return dInfo;
+ }
+
/**
* Returns information about plugin directories which provide the requested
* resource
@@ -1311,11 +1322,15 @@
}
public DirectoryInfo(URL url) {
+ this(url, null);
+ }
+
+ public DirectoryInfo(URL url, org.jdom.Document creoleDoc) {
this.url = normaliseCreoleUrl(url);
valid = true;
resourceInfoList = new ArrayList<ResourceInfo>();
// this may invalidate it if something goes wrong
- parseCreole();
+ parseCreole(creoleDoc);
remote = !this.url.getProtocol().equalsIgnoreCase("file");
@@ -1362,11 +1377,14 @@
* Performs a shallow parse of the creole.xml file to get the information
* about the resources contained.
*/
- protected void parseCreole() {
- SAXBuilder builder = new SAXBuilder(false);
+ protected void parseCreole(org.jdom.Document creoleDoc) {
+
try {
- URL creoleFileURL = new URL(url, "creole.xml");
- org.jdom.Document creoleDoc = builder.build(creoleFileURL);
+ if (creoleDoc == null) {
+ SAXBuilder builder = new SAXBuilder(false);
+ URL creoleFileURL = new URL(url, "creole.xml");
+ creoleDoc = builder.build(creoleFileURL);
+ }
final Map<String, ResourceInfo> resInfos = new LinkedHashMap<String,
ResourceInfo>();
List<Element> jobsList = new ArrayList<Element>();
Modified:
gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java
===================================================================
--- gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java
2016-04-03 01:21:58 UTC (rev 19186)
+++ gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java
2016-04-03 08:56:16 UTC (rev 19187)
@@ -224,7 +224,7 @@
throws MalformedURLException {
Element jdomElt = jdomDoc.getRootElement();
URL directoryUrl = new URL(creoleFileUrl, ".");
- DirectoryInfo dirInfo = Gate.getDirectoryInfo(directoryUrl);
+ DirectoryInfo dirInfo = Gate.getDirectoryInfo(directoryUrl,jdomDoc);
if(dirInfo != null) {
Map<String, Element> resourceElements = new HashMap<String, Element>();
findResourceElements(resourceElements, jdomElt);
Modified: gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java
===================================================================
--- gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java
2016-04-03 01:21:58 UTC (rev 19186)
+++ gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java
2016-04-03 08:56:16 UTC (rev 19187)
@@ -57,6 +57,27 @@
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.log4j.Logger;
+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.collection.CollectRequest;
+import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.impl.DefaultServiceLocator;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResult;
+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.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
@@ -170,7 +191,126 @@
public Set<URL> getDirectories() {
return Collections.unmodifiableSet(directories);
} // getDirectories
+
+ public void registerPlugin(String group, String artifact, String version)
throws Exception {
+ // get the jar file for the coordinates (not dependencies yet)
+ Artifact artifactObj = new DefaultArtifact(group,artifact,"jar",version );
+
+ Dependency dependency =
+ new Dependency(artifactObj , "all" );
+ RemoteRepository central = new RemoteRepository.Builder( "central",
"default", "http://repo1.maven.org/maven2/" ).build();
+ ArtifactRequest artifactRequest = new ArtifactRequest();
+ artifactRequest.setArtifact(artifactObj);
+ artifactRequest.addRepository(central);
+
+ ArtifactResult artifactResult =
getRepositorySystem().resolveArtifact(getRepositorySession(), artifactRequest);
+
+ System.out.println(artifactResult.getArtifact().getFile());
+
+ URL directoryUrl = new
URL("jar:"+artifactResult.getArtifact().getFile().toURI().toURL()+"!/");
+ System.out.println(directoryUrl);
+
+
+ // check it has a creole.xml at the root
+ URL directoryXmlFileUrl = new URL(directoryUrl,"creole.xml");
+ System.out.println(directoryXmlFileUrl);
+
+ InputStream creoleStream = null;
+
+ try {
+ creoleStream = directoryXmlFileUrl.openStream();
+ }
+ catch(IOException ioe) {
+ throw new IOException(directoryXmlFileUrl.toExternalForm() + " does not
exist so this artifact is not a GATE plugin");
+ }
+
+ CollectRequest collectRequest = new CollectRequest();
+ collectRequest.setRoot( dependency );
+ collectRequest.addRepository( central );
+ DependencyNode node = getRepositorySystem().collectDependencies(
getRepositorySession(), collectRequest ).getRoot();
+
+ DependencyRequest dependencyRequest = new DependencyRequest();
+ dependencyRequest.setRoot( node );
+
+ DependencyResult result = repoSystem.resolveDependencies(
getRepositorySession(), dependencyRequest );
+
+ // get the creole.xml out of the jar and add jar elements for this
+ // jar (marked for scanning) and the dependencies
+
+ Document jdomDoc =
+ jdomBuilder.build(creoleStream,
directoryXmlFileUrl.toExternalForm());
+
+ Element creoleRoot = jdomDoc.getRootElement();
+
+ for (ArtifactResult ar : result.getArtifactResults()) {
+ Element jarElement = new Element("JAR");
+
jarElement.setText(ar.getArtifact().getFile().toURI().toURL().toExternalForm());
+
+ if (ar.getArtifact().equals(artifactResult.getArtifact())) {
+ jarElement.setAttribute("SCAN", "true");
+ }
+
+ creoleRoot.addContent(jarElement);
+ }
+
+ XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
+ xmlOut.output(jdomDoc, System.out);
+
+ // fingers crossed processing then continues as for any other plugin
+ if (!directories.contains(directoryUrl)) {
+ Gate.addKnownPlugin(directoryUrl);
+
+ try {
+ parseDirectory(jdomDoc, directoryUrl,
+ directoryXmlFileUrl, true);
+ log.info("CREOLE plugin loaded: " + directoryUrl);
+ }
+ catch(Throwable e) {
+ // it failed:
+ throw (new GateException("couldn't open creole.xml",e));
+ }
+
+ directories.add(directoryUrl);
+
+ firePluginLoaded(directoryUrl);
+ }
+
+
+ }
+
+ private static RepositorySystem repoSystem = null;
+
+ private static DefaultRepositorySystemSession repoSystemSession = null;
+
+ private static RepositorySystem getRepositorySystem() {
+ if(repoSystem != null) return repoSystem;
+
+ DefaultServiceLocator locator =
+ MavenRepositorySystemUtils.newServiceLocator();
+ locator.addService(RepositoryConnectorFactory.class,
+ BasicRepositoryConnectorFactory.class);
+ locator.addService(TransporterFactory.class, FileTransporterFactory.class);
+ locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
+
+ repoSystem = locator.getService(RepositorySystem.class);
+
+ return repoSystem;
+ }
+
+ private static RepositorySystemSession getRepositorySession() {
+ if(repoSystemSession != null) return repoSystemSession;
+
+ repoSystemSession = MavenRepositorySystemUtils.newSession();
+
+ //LocalRepository localRepo = new LocalRepository("target/local-repo");
+ LocalRepository localRepo = new
LocalRepository("/home/mark/.m2/repository/");
+ repoSystemSession.setLocalRepositoryManager(getRepositorySystem()
+ .newLocalRepositoryManager(repoSystemSession, localRepo));
+
+ return repoSystemSession;
+ }
+
@Override
public void registerComponent(Class<? extends Resource> resourceClass)
throws GateException {
URL creoleFileUrl =
resourceClass.getResource("/gate/creole/CreoleRegisterImpl.class");
@@ -317,18 +457,34 @@
registerDirectories(directoryUrl, true);
}
+ protected void parseDirectory(InputStream directoryStream, URL directoryUrl,
+ URL creoleFileUrl, boolean loadDependencies) throws GateException {
+ try {
+ Document jdomDoc =
+ jdomBuilder.build(directoryStream,
creoleFileUrl.toExternalForm());
+ parseDirectory(jdomDoc, directoryUrl, creoleFileUrl, loadDependencies);
+ }
+ catch (IOException ioe) {
+ throw (new GateException(ioe));
+ }
+ catch(JDOMException je) {
+ if(DEBUG) je.printStackTrace(Err.getPrintWriter());
+ throw (new GateException(je));
+ }
+
+ }
+
/**
* Parse a directory file (represented as an open stream), adding resource
* data objects to the CREOLE register as they occur. If the resource is from
* a URL then that location is passed (otherwise null).
*/
- protected void parseDirectory(InputStream directoryStream, URL directoryUrl,
+ protected void parseDirectory(Document jdomDoc, URL directoryUrl,
URL creoleFileUrl, boolean loadDependencies) throws GateException {
// create a handler for the directory file and parse it;
// this will create ResourceData entries in the register
try {
- Document jdomDoc =
- jdomBuilder.build(directoryStream, creoleFileUrl.toExternalForm());
+
CreoleAnnotationHandler annotationHandler =
new CreoleAnnotationHandler(creoleFileUrl);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140
_______________________________________________
GATE-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gate-cvs