summaryrefslogtreecommitdiffstats
path: root/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp')
-rw-r--r--sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappBuilder.java65
-rw-r--r--sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponent.java165
-rw-r--r--sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentType.java34
-rw-r--r--sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentTypeLoader.java46
-rw-r--r--sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappImplementation.java27
-rw-r--r--sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappLoader.java123
6 files changed, 460 insertions, 0 deletions
diff --git a/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappBuilder.java b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappBuilder.java
new file mode 100644
index 0000000000..ea9c44c48b
--- /dev/null
+++ b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.tuscany.runtime.webapp.implementation.webapp;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.builder.BuilderException;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
+import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.PropertyValue;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WebappBuilder extends ComponentBuilderExtension<WebappImplementation> {
+ protected Class<WebappImplementation> getImplementationType() {
+ return WebappImplementation.class;
+ }
+
+ public Component build(ComponentDefinition<WebappImplementation> definition, DeploymentContext context)
+ throws BuilderException {
+
+ URI uri = definition.getUri();
+ WebappComponentType componentType = definition.getImplementation().getComponentType();
+
+ Map<String, ObjectFactory<?>> attributes = new HashMap<String, ObjectFactory<?>>();
+ for (PropertyValue<?> property : definition.getPropertyValues().values()) {
+ ObjectFactory<?> factory = property.getValueFactory();
+ if (factory != null) {
+ attributes.put(property.getName(), factory);
+ }
+ }
+
+ Map<String, Class<?>> referenceTypes = new HashMap<String, Class<?>>();
+ for (ReferenceDefinition referenceDefinition : componentType.getReferences().values()) {
+ String name = referenceDefinition.getUri().getFragment();
+ Class<?> type = referenceDefinition.getServiceContract().getInterfaceClass();
+ referenceTypes.put(name, type);
+ }
+
+ return new WebappComponent(uri, proxyService, workContext, context.getGroupId(), attributes, referenceTypes);
+ }
+}
diff --git a/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponent.java b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponent.java
new file mode 100644
index 0000000000..f4b3276c6b
--- /dev/null
+++ b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponent.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.tuscany.runtime.webapp.implementation.webapp;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.servlet.ServletContext;
+
+import org.osoa.sca.CallableReference;
+import org.osoa.sca.ComponentContext;
+import org.osoa.sca.ServiceReference;
+
+import org.apache.tuscany.spi.ObjectCreationException;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.component.TargetInvokerCreationException;
+import org.apache.tuscany.spi.component.TargetResolutionException;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.extension.AtomicComponentExtension;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.physical.PhysicalOperationDefinition;
+import org.apache.tuscany.spi.wire.ProxyService;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.wire.Wire;
+
+import org.apache.tuscany.core.component.ComponentContextImpl;
+import org.apache.tuscany.core.component.ComponentContextProvider;
+import org.apache.tuscany.core.component.ServiceReferenceImpl;
+import org.apache.tuscany.core.wire.WireObjectFactory;
+import org.apache.tuscany.runtime.webapp.Constants;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WebappComponent extends AtomicComponentExtension implements ComponentContextProvider {
+ private final Map<String, ObjectFactory<?>> propertyFactories;
+ private final Map<String, Class<?>> referenceTypes;
+ private final Map<String, Wire> referenceFactories;
+ private final ComponentContext context;
+
+ public WebappComponent(URI name,
+ ProxyService proxyService,
+ WorkContext workContext,
+ URI groupId,
+ Map<String, ObjectFactory<?>> attributes,
+ Map<String, Class<?>> referenceTypes) {
+ super(name, proxyService, workContext, groupId, 0, 0, 0);
+ this.propertyFactories = attributes;
+ this.referenceTypes = referenceTypes;
+ referenceFactories = new ConcurrentHashMap<String, Wire>(referenceTypes.size());
+ context = new ComponentContextImpl(this);
+ }
+
+ public List<Wire> getWires(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void attachCallbackWire(Wire wire) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void attachWire(Wire wire) {
+ String name = wire.getSourceUri().getFragment();
+ referenceFactories.put(name, wire);
+ }
+
+ public void attachWires(List<Wire> wires) {
+ throw new UnsupportedOperationException();
+ }
+
+ protected <B> ObjectFactory<B> createWireFactory(Class<B> interfaze, Wire wire) {
+ return new WireObjectFactory<B>(interfaze, wire, proxyService);
+ }
+
+ public void bind(ServletContext servletContext) {
+ servletContext.setAttribute(Constants.CONTEXT_ATTRIBUTE, getComponentContext());
+ for (Map.Entry<String, ObjectFactory<?>> entry : propertyFactories.entrySet()) {
+ servletContext.setAttribute(entry.getKey(), entry.getValue().getInstance());
+ }
+ for (Map.Entry<String, Wire> entry : referenceFactories.entrySet()) {
+ String name = entry.getKey();
+ Wire wire = entry.getValue();
+ Class<?> type = referenceTypes.get(name);
+ ObjectFactory<?> factory = createWireFactory(type, wire);
+ servletContext.setAttribute(name, factory.getInstance());
+ }
+ }
+
+
+ public TargetInvoker createTargetInvoker(String targetName, Operation operation)
+ throws TargetInvokerCreationException {
+ throw new UnsupportedOperationException();
+ }
+
+ public TargetInvoker createTargetInvoker(String targetName, PhysicalOperationDefinition operation)
+ throws TargetInvokerCreationException {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object createInstance() throws ObjectCreationException {
+ throw new UnsupportedOperationException();
+ }
+
+ public InstanceWrapper<?> createInstanceWrapper() throws ObjectCreationException {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object getTargetInstance() throws TargetResolutionException {
+ throw new UnsupportedOperationException();
+ }
+
+ public ComponentContext getComponentContext() {
+ return context;
+ }
+
+ public <B> B getProperty(Class<B> type, String propertyName) {
+ ObjectFactory<?> factory = propertyFactories.get(propertyName);
+ if (factory != null) {
+ return type.cast(factory.getInstance());
+ } else {
+ return null;
+ }
+
+ }
+
+ public <B> B getService(Class<B> type, String name) {
+ Wire wire = referenceFactories.get(name);
+ if (wire == null) {
+ return null;
+ }
+ ObjectFactory<B> factory = createWireFactory(type, wire);
+ return factory.getInstance();
+ }
+
+ public <B> ServiceReference<B> getServiceReference(Class<B> type, String name) {
+ Wire wire = referenceFactories.get(name);
+ if (wire == null) {
+ return null;
+ }
+ ObjectFactory<B> factory = createWireFactory(type, wire);
+ return new ServiceReferenceImpl<B>(type, factory);
+ }
+
+ public <B, R extends CallableReference<B>> R cast(B target) {
+ return (R) proxyService.cast(target);
+ }
+}
diff --git a/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentType.java b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentType.java
new file mode 100644
index 0000000000..89b3f8283a
--- /dev/null
+++ b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentType.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.tuscany.runtime.webapp.implementation.webapp;
+
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.apache.tuscany.spi.model.Scope;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WebappComponentType extends ComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> {
+ public Scope getImplementationScope() {
+ return Scope.COMPOSITE;
+ }
+}
diff --git a/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentTypeLoader.java b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentTypeLoader.java
new file mode 100644
index 0000000000..56bd65169c
--- /dev/null
+++ b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappComponentTypeLoader.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.tuscany.runtime.webapp.implementation.webapp;
+
+import org.osoa.sca.annotations.Reference;
+
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WebappComponentTypeLoader extends ComponentTypeLoaderExtension<WebappImplementation> {
+
+ public WebappComponentTypeLoader(@Reference LoaderRegistry loaderRegistry) {
+ super(loaderRegistry);
+ }
+
+ protected Class<WebappImplementation> getImplementationClass() {
+ return WebappImplementation.class;
+ }
+
+ public void load(
+ WebappImplementation implementation,
+ DeploymentContext deploymentContext)
+ throws LoaderException {
+ }
+}
diff --git a/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappImplementation.java b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappImplementation.java
new file mode 100644
index 0000000000..03a8a7d5be
--- /dev/null
+++ b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappImplementation.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.tuscany.runtime.webapp.implementation.webapp;
+
+import org.apache.tuscany.spi.model.Implementation;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WebappImplementation extends Implementation<WebappComponentType> {
+}
diff --git a/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappLoader.java b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappLoader.java
new file mode 100644
index 0000000000..7794979a03
--- /dev/null
+++ b/sandbox/old/contrib/runtime-webapp/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/implementation/webapp/WebappLoader.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.tuscany.runtime.webapp.implementation.webapp;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import javax.xml.namespace.QName;
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.osoa.sca.annotations.Reference;
+
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.idl.java.InterfaceJavaIntrospector;
+import org.apache.tuscany.spi.implementation.java.ProcessingException;
+import org.apache.tuscany.spi.loader.IllegalSCDLNameException;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.MissingResourceException;
+import org.apache.tuscany.spi.loader.UnrecognizedElementException;
+import org.apache.tuscany.spi.model.ModelObject;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.ServiceContract;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WebappLoader extends LoaderExtension<WebappImplementation> {
+ private static final QName WEBAPP = new QName("http://tuscany.apache.org/xmlns/sca/2.0-alpha", "webapp");
+
+ private final InterfaceJavaIntrospector introspector;
+
+ public WebappLoader(@Reference LoaderRegistry registry,
+ @Reference InterfaceJavaIntrospector introspector) {
+ super(registry);
+ this.introspector = introspector;
+ }
+
+ public QName getXMLType() {
+ return WEBAPP;
+ }
+
+ public WebappImplementation load(
+ ModelObject object,
+ XMLStreamReader reader,
+ DeploymentContext deploymentContext)
+ throws XMLStreamException, LoaderException {
+
+ WebappComponentType componentType = new WebappComponentType();
+ WebappImplementation impl = new WebappImplementation();
+ impl.setComponentType(componentType);
+
+ while (true) {
+ switch (reader.next()) {
+ case START_ELEMENT:
+ QName qname = reader.getName();
+ if ("reference".equals(qname.getLocalPart())) {
+ defineReference(componentType, reader, deploymentContext);
+ } else {
+ throw new UnrecognizedElementException(qname);
+ }
+ reader.next();
+ break;
+ case END_ELEMENT:
+ return impl;
+ }
+ }
+ }
+
+ protected void defineReference(WebappComponentType componentType,
+ XMLStreamReader reader,
+ DeploymentContext context) throws LoaderException {
+ String name = reader.getAttributeValue(null, "name");
+ URI referenceURI;
+ try {
+ referenceURI = new URI('#' + name);
+ } catch (URISyntaxException e) {
+ throw new IllegalSCDLNameException(e);
+ }
+
+ String className = reader.getAttributeValue(null, "interface");
+ if (className == null) {
+ className = reader.getAttributeValue(null, "class");
+ }
+
+ Class<?> referenceType;
+ try {
+ referenceType = context.getClassLoader().loadClass(className);
+ } catch (ClassNotFoundException e) {
+ throw new MissingResourceException(className, e);
+ }
+
+ ServiceContract serviceContract;
+ try {
+ serviceContract = introspector.introspect(referenceType);
+ } catch (InvalidServiceContractException e) {
+ throw new ProcessingException("Invalid service contract", name, e);
+ }
+
+ ReferenceDefinition definition = new ReferenceDefinition(referenceURI, serviceContract);
+ componentType.add(definition);
+ }
+}