summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/implementation-widget
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/trunk/modules/implementation-widget')
-rw-r--r--sca-java-2.x/trunk/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java59
1 files changed, 42 insertions, 17 deletions
diff --git a/sca-java-2.x/trunk/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java b/sca-java-2.x/trunk/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java
index bf84a15aa6..39e6ae0606 100644
--- a/sca-java-2.x/trunk/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java
+++ b/sca-java-2.x/trunk/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java
@@ -20,7 +20,11 @@ package org.apache.tuscany.sca.implementation.widget;
import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import javax.xml.namespace.QName;
@@ -61,7 +65,6 @@ public class WidgetImplementationProcessor extends BaseStAXArtifactProcessor imp
implementationFactory = modelFactories.getFactory(WidgetImplementationFactory.class);
}
-
public QName getArtifactType() {
// Returns the QName of the XML element processed by this processor
return WidgetImplementation.TYPE;
@@ -103,26 +106,48 @@ public class WidgetImplementationProcessor extends BaseStAXArtifactProcessor imp
public void resolve(WidgetImplementation implementation, ModelResolver resolver, ProcessorContext context) throws ContributionResolveException {
if (implementation != null) {
- // Resolve the resource directory location
+ // Resolve the resource directory location
Artifact artifact = contributionFactory.createArtifact();
artifact.setURI(implementation.getLocation());
Artifact resolved = resolver.resolveModel(Artifact.class, artifact, context);
- if (resolved.getLocation() != null) {
- try {
- implementation.setLocationURL(new URL(resolved.getLocation()));
-
- //introspect implementation
- WidgetImplementationIntrospector widgetIntrospector =
- new WidgetImplementationIntrospector(registry, implementation);
- widgetIntrospector.introspectImplementation();
-
- implementation.setUnresolved(false);
- } catch (IOException e) {
- ContributionResolveException ce = new ContributionResolveException(e);
- error(context.getMonitor(), "ContributionResolveException", resolver, ce);
- //throw ce;
+
+ if(resolved.getLocation() == null) {
+ URL resource = null;
+ URI uri = URI.create(implementation.getLocation());
+ Artifact parent = context.getArtifact();
+ if (!uri.isAbsolute()) {
+ if (parent != null && parent.getURI() != null) {
+ URI base = URI.create("/" + parent.getURI());
+ uri = base.resolve(uri);
+ // Remove the leading / to make artifact resolver happy
+ if (uri.toString().startsWith("/")) {
+ uri = URI.create(uri.toString().substring(1));
+ }
+ }
+ }
+
+
+ // The resource can be out of scope of the contribution root
+ if (parent != null && parent.getLocation() != null) {
+ try {
+ resource = new URL(new URL(parent.getLocation()), implementation.getLocation());
+
+ implementation.setLocationURL(resource);
+
+ //introspect implementation
+ WidgetImplementationIntrospector widgetIntrospector =
+ new WidgetImplementationIntrospector(registry, implementation);
+ widgetIntrospector.introspectImplementation();
+
+ implementation.setUnresolved(false);
+ } catch (MalformedURLException e) {
+ ContributionResolveException ce = new ContributionResolveException(e);
+ error(context.getMonitor(), "ContributionResolveException", resolver, ce);
+ }
}
- } else {
+ }
+
+ if (implementation.isUnresolved()) {
error(context.getMonitor(), "CouldNotResolveLocation", resolver, implementation.getLocation());
//throw new ContributionResolveException("Could not resolve implementation.widget location: " + implementation.getLocation());
}