You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/04/24 04:18:55 UTC

svn commit: r531681 - in /incubator/tuscany/java/sca/samples/implementation-crud/src/main: java/crud/ resources/

Author: jsdelfino
Date: Mon Apr 23 19:18:54 2007
New Revision: 531681

URL: http://svn.apache.org/viewvc?view=rev&rev=531681
Log:
Cleaned up the CRUD implementation extension sample. Added comments, removed dependencies on core classes. Renamed Loader to Processor. Added FIXME comments where we need to fix things.

Added:
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java   (with props)
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/ResourceManager.java   (with props)
Removed:
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImpl.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationLoader.java
Modified:
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUD.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDAtomicComponent.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDComponentBuilder.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDModuleActivator.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDTargetInvoker.java
    incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/crud.composite

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUD.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUD.java?view=diff&rev=531681&r1=531680&r2=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUD.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUD.java Mon Apr 23 19:18:54 2007
@@ -19,18 +19,38 @@
 package crud;
 
 /**
- * The service interface implemented by CRUD components.
+ * The service interface of the single CRUD service provided by CRUD components.
  * 
  * @version $Rev$ $Date$
  */
 public interface CRUD {
 
+    /**
+     * Create a new resource.
+     * @param resource
+     * @return
+     */
     String create(Object resource);
 
+    /**
+     * Retrieve a resource.
+     * @param id
+     * @return
+     */
     Object retrieve(String id);
 
+    /**
+     * Update a resource.
+     * @param id
+     * @param resource
+     * @return
+     */
     Object update(String id, Object resource);
 
+    /**
+     * Delete a resource.
+     * @param id
+     */
     void delete(String id);
 
 }

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDAtomicComponent.java?view=diff&rev=531681&r1=531680&r2=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDAtomicComponent.java Mon Apr 23 19:18:54 2007
@@ -39,23 +39,24 @@
 import org.osoa.sca.ServiceReference;
 
 /**
- * The runtime instantiation of Java component implementations
+ * The runtime instantiation of CRUD component implementations.
+ * FIXME We need to remove the requirement for such a class, implementing
+ * the implementation model should be sufficient.
  * 
  * @version $Rev$ $Date$
  */
 public class CRUDAtomicComponent extends AtomicComponentExtension implements ComponentContextProvider {
-    private CRUDImplementation impl;
     private ComponentContext componentContext;
+    private ResourceManager resourceManager;
 
-    public CRUDAtomicComponent(URI uri, URI groupId, CRUDImplementation impl) {
+    public CRUDAtomicComponent(URI uri, URI groupId, CRUDImplementation implementation) {
         super(uri, null, null, groupId, 50);
-        this.impl = impl;
         componentContext = new ComponentContextImpl(this);
-
+        resourceManager = new ResourceManager(implementation.getDirectory());
     }
 
     public Object createInstance() throws ObjectCreationException {
-        return new CRUDImpl(impl.getDirectory());
+        return resourceManager;
     }
 
     public InstanceWrapper createInstanceWrapper() throws ObjectCreationException {
@@ -63,7 +64,7 @@
     }
 
     public Object getTargetInstance() throws TargetResolutionException {
-        return new CRUDImpl(impl.getDirectory());
+        return resourceManager;
     }
 
     public void attachCallbackWire(Wire arg0) {
@@ -81,8 +82,7 @@
 
     public TargetInvoker createTargetInvoker(String targetName, final Operation operation, boolean callback)
         throws TargetInvokerCreationException {
-        return new CRUDTargetInvoker(operation, impl.getDirectory());
-
+        return new CRUDTargetInvoker(operation, resourceManager);
     }
 
     @Override
@@ -91,7 +91,6 @@
     }
 
     public <B, R extends CallableReference<B>> R cast(B target) {
-        // TODO Auto-generated method stub
         return null;
     }
 

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDComponentBuilder.java?view=diff&rev=531681&r1=531680&r2=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDComponentBuilder.java Mon Apr 23 19:18:54 2007
@@ -22,28 +22,24 @@
 
 import org.apache.tuscany.assembly.Component;
 import org.apache.tuscany.spi.builder.BuilderConfigException;
+import org.apache.tuscany.spi.builder.ComponentBuilder;
 import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
-import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
 
 /**
- * Builds a Java-based atomic context from a component definition
+ * A builder that builds a Java-based atomic context from an implementation model.
+ * FIXME We need to remove the requirement for builders.
  * 
- * @version $$Rev$$ $$Date: 2007-03-28 09:03:01 -0700 (Wed, 28 Mar
- *          2007) $$
+ * @version $$Rev$$ $$Date$$
  */
-public class CRUDComponentBuilder extends ComponentBuilderExtension<CRUDImplementation> {
+public class CRUDComponentBuilder implements ComponentBuilder {
 
-    @SuppressWarnings("unchecked")
     public AtomicComponent build(Component definition, DeploymentContext context) throws BuilderConfigException {
-        URI id = URI.create(context.getComponentId() + definition.getName());
-        CRUDAtomicComponent component = new CRUDAtomicComponent(id, context.getGroupId(),
+        URI uri = URI.create(context.getComponentId() + definition.getName());
+        CRUDAtomicComponent component = new CRUDAtomicComponent(
+                                                                uri, context.getGroupId(),
                                                                 (CRUDImplementation)definition.getImplementation());
         return component;
-    }
-
-    protected Class<CRUDImplementation> getImplementationType() {
-        return CRUDImplementation.class;
     }
 
 }

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java?view=diff&rev=531681&r1=531680&r2=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementation.java Mon Apr 23 19:18:54 2007
@@ -18,51 +18,133 @@
  */
 package crud;
 
-import org.apache.tuscany.assembly.ComponentService;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.tuscany.assembly.ConstrainingType;
 import org.apache.tuscany.assembly.Implementation;
-import org.apache.tuscany.assembly.impl.ComponentServiceImpl;
-import org.apache.tuscany.assembly.impl.ComponentTypeImpl;
+import org.apache.tuscany.assembly.Property;
+import org.apache.tuscany.assembly.Reference;
+import org.apache.tuscany.assembly.Service;
+import org.apache.tuscany.assembly.impl.ServiceImpl;
 import org.apache.tuscany.interfacedef.java.JavaInterface;
 import org.apache.tuscany.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceContractImpl;
 import org.apache.tuscany.interfacedef.java.impl.JavaInterfaceImpl;
+import org.apache.tuscany.policy.Intent;
+import org.apache.tuscany.policy.PolicySet;
 
 /**
- * @version $$Rev$$ $$Date: 2007-04-03 11:08:56 -0700 (Tue, 03 Apr
- *          2007) $$
+ * The model representing a sample CRUD implementation in an SCA
+ * assembly model.
+ * 
+ * The sample CRUD implementation is not a full blown implementation,
+ * it only supports a subset of what a component implementation can
+ * support:
+ * - a single fixed service (as opposed to a list of services typed by different
+ * interfaces)
+ * - a directory attribute used to specify where a CRUD component is going
+ * to persist resources 
+ * - no references or properties
+ * - no policy intents or policy sets
+ * 
+ * @version $$Rev$$ $$Date$$
  */
-public class CRUDImplementation extends ComponentTypeImpl implements Implementation {
+public class CRUDImplementation implements Implementation {
+    private Service crudService;
     private String directory;
 
-    public CRUDImplementation(String directory) {
-        this.directory = directory;
-        ComponentService service = createService(CRUD.class);
-        getServices().add(service);
-    }
-
-    private ComponentService createService(Class<?> type) {
-        org.apache.tuscany.assembly.ComponentService service = new ComponentServiceImpl();
-        service.setName(type.getSimpleName());
-        JavaInterface interfaze = new JavaInterfaceImpl();
-        interfaze.setJavaClass(type);
+    /**
+     * Constructs a new CRUD implementation.
+     */
+    public CRUDImplementation() {
+        
+        // CRUD implementation always provide a single service exposing
+        // the CRUD interface, and have no references and properties
+        crudService = new ServiceImpl();
+        crudService.setName("CRUD");
+        JavaInterface javaInterface = new JavaInterfaceImpl();
+        javaInterface.setJavaClass(CRUD.class);
         JavaInterfaceContract interfaceContract = new JavaInterfaceContractImpl();
-        interfaceContract.setInterface(interfaze);
-        service.setInterfaceContract(interfaceContract);
-        return service;
+        interfaceContract.setInterface(javaInterface);
+        crudService.setInterfaceContract(interfaceContract);
     }
 
     /**
-     * @return the directory
+     * Returns the directory used by CRUD implementations to persist
+     * resources.
+     * 
+     * @return the directory used to persist resources
      */
     public String getDirectory() {
         return directory;
     }
 
     /**
-     * @param directory the directory to set
+     * Sets the directory used by CRUD implementations to persist
+     * resources.
+     * 
+     * @param directory the directory used to persist resources
      */
     public void setDirectory(String directory) {
         this.directory = directory;
+    }
+
+    public ConstrainingType getConstrainingType() {
+        // CRUD implementations do not support constrainingTypes
+        return null;
+    }
+
+    public List<Property> getProperties() {
+        // CRUD implementations do not support properties
+        return Collections.emptyList();
+    }
+
+    public List<Reference> getReferences() {
+        // CRUD implementations do not support properties
+        return Collections.emptyList();
+    }
+
+    public List<Service> getServices() {
+        // CRUD implementations provide a single fixed CRUD service 
+        return Collections.singletonList(crudService);
+    }
+
+    public String getURI() {
+        // CRUD implementations don't have a URI  
+        return null;
+    }
+
+    public void setConstrainingType(ConstrainingType constrainingType) {
+        // CRUD implementations do not support constrainingTypes 
+    }
+
+    public void setURI(String uri) {
+        // CRUD implementations don't have a URI  
+    }
+
+    public List<PolicySet> getPolicySets() {
+        // CRUD implementations do not support policy sets 
+        return Collections.emptyList();
+    }
+
+    public List<Intent> getRequiredIntents() {
+        // CRUD implementations do not support intents
+        return Collections.emptyList();
+    }
+
+    public List<Object> getExtensions() {
+        // CRUD implementations do not support extensions
+        return Collections.emptyList();
+    }
+
+    public boolean isUnresolved() {
+        // CRUD implementations are always resolved
+        return false;
+    }
+
+    public void setUnresolved(boolean unresolved) {
+        // CRUD implementations are always resolved
     }
 
 }

Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java?view=auto&rev=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java (added)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java Mon Apr 23 19:18:54 2007
@@ -0,0 +1,92 @@
+/*
+ * 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 crud;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.contribution.processor.StAXArtifactProcessorExtension;
+import org.apache.tuscany.contribution.resolver.ArtifactResolver;
+import org.apache.tuscany.contribution.service.ContributionReadException;
+import org.apache.tuscany.contribution.service.ContributionResolveException;
+import org.apache.tuscany.contribution.service.ContributionWireException;
+import org.apache.tuscany.contribution.service.ContributionWriteException;
+
+/**
+ * Implements a STAX artifact processor for CRUD implementations.
+ * 
+ * The artifact processor is responsible for processing <implementation.crud>
+ * elements in SCA assembly XML composite files and populating the CRUD
+ * implementation model, resolving its references to other artifacts in the SCA
+ * contribution, and optionally write the model back to SCA assembly XML. 
+ *
+ * @version $Rev$ $Date$
+ */
+public class CRUDImplementationProcessor implements StAXArtifactProcessorExtension<CRUDImplementation> {
+    private static final QName IMPLEMENTATION_CRUD = new QName("http://crud", "implementation.crud");
+
+    public QName getArtifactType() {
+        // Returns the qname of the XML element processed by this processor
+        return IMPLEMENTATION_CRUD;
+    }
+
+    public Class<CRUDImplementation> getModelType() {
+        // Returns the type of model processed by this processor
+        return CRUDImplementation.class;
+    }
+
+    public CRUDImplementation read(XMLStreamReader reader) throws ContributionReadException {
+        assert IMPLEMENTATION_CRUD.equals(reader.getName());
+        
+        // Read an <implementation.crud> element
+        try {
+            // Read the directory attribute. This is where the sample
+            // CRUD implementation will persist resources.
+            String directory = reader.getAttributeValue(null, "directory");
+
+            // Create an initialize the CRUD implementation model
+            CRUDImplementation implementation = new CRUDImplementation();
+            implementation.setDirectory(directory);
+            
+            // Skip to end element
+            while (reader.hasNext()) {
+                if (reader.next() == END_ELEMENT && IMPLEMENTATION_CRUD.equals(reader.getName())) {
+                    break;
+                }
+            }
+            
+            return implementation;
+        } catch (XMLStreamException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+
+    public void resolve(CRUDImplementation impl, ArtifactResolver resolver) throws ContributionResolveException {
+    }
+
+    public void wire(CRUDImplementation model) throws ContributionWireException {
+    }
+
+    public void write(CRUDImplementation model, XMLStreamWriter outputSource) throws ContributionWriteException {
+    }
+}

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDImplementationProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDModuleActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDModuleActivator.java?view=diff&rev=531681&r1=531680&r2=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDModuleActivator.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDModuleActivator.java Mon Apr 23 19:18:54 2007
@@ -27,29 +27,42 @@
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 
 /**
+ * Implements a module activator for the CRUD implementation extension module.
+ * 
+ * The module activator is responsible for contributing the CRUD implementation
+ * extensions and plugging them in the extension points defined by the Tuscany runtime.
+ * 
  * @version $Rev$ $Date$
  */
 public class CRUDModuleActivator implements ModuleActivator {
 
-    private CRUDImplementationLoader implementationLoader;
+    private CRUDImplementationProcessor implementationArtifactProcessor;
     private CRUDComponentBuilder builder;
 
     public void start(ExtensionPointRegistry registry) {
-        StAXArtifactProcessorExtensionPoint processors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
-        BuilderRegistry builderRegistry = registry.getExtensionPoint(BuilderRegistry.class);
-
-        implementationLoader = new CRUDImplementationLoader();
-        processors.addExtension(implementationLoader);
+        
+        // Add the CRUD implementation extension to the StAXArtifactProcessor
+        // extension point
+        StAXArtifactProcessorExtensionPoint artifactProcessors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        implementationArtifactProcessor = new CRUDImplementationProcessor();
+        artifactProcessors.addExtension(implementationArtifactProcessor);
 
+        //FIXME Remove the requirement to have a builder
+        BuilderRegistry builderRegistry = registry.getExtensionPoint(BuilderRegistry.class);
         builder = new CRUDComponentBuilder();
-        builder.setBuilderRegistry(builderRegistry);
-        builder.init();
+        builderRegistry.register(CRUDImplementation.class, builder);
     }
 
     public Map<Class, Object> getExtensionPoints() {
+        // This module extension does not contribute any new
+        // extension point
         return null;
     }
     
     public void stop(ExtensionPointRegistry registry) {
+        
+        // Remove the contributed extensions
+        StAXArtifactProcessorExtensionPoint artifactProcessors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        artifactProcessors.removeExtension(implementationArtifactProcessor);
     }
 }

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDTargetInvoker.java?view=diff&rev=531681&r1=531680&r2=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/CRUDTargetInvoker.java Mon Apr 23 19:18:54 2007
@@ -20,41 +20,72 @@
 package crud;
 
 import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.tuscany.interfacedef.Operation;
 import org.apache.tuscany.spi.component.WorkContext;
-import org.apache.tuscany.spi.extension.TargetInvokerExtension;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.TargetInvoker;
 
 /**
+ * Implements a target invoker for CRUD component implementations.
+ * 
+ * The target invoker is responsible for dispatching invocations to the particular
+ * component implementation logic. In this example we are simply delegating the
+ * CRUD operation invocations to the corresponding methods on our fake
+ * resource manager.
+ * 
  * @version $Rev$ $Date$
  */
-public class CRUDTargetInvoker extends TargetInvokerExtension {
-    private static final Map<String, Method> METHODS = new HashMap<String, Method>();
-    static {
-        for (Method m : CRUD.class.getMethods()) {
-            METHODS.put(m.getName(), m);
+public class CRUDTargetInvoker implements TargetInvoker {
+    private Operation operation;
+    private ResourceManager resourceManager;
+    
+    public CRUDTargetInvoker(Operation operation, ResourceManager resourceManager) {
+        this.operation = operation;
+        this.resourceManager = resourceManager;
+    }
+    
+    public Message invoke(Message msg) throws InvocationRuntimeException {
+        try {
+            Object resp = invokeTarget(msg.getBody(), msg.getConversationSequence(), msg.getWorkContext());
+            msg.setBody(resp);
+        } catch (InvocationTargetException e) {
+            msg.setBodyWithFault(e.getCause());
         }
+        return msg;
     }
-    private Method operation;
-    private CRUD instance;
 
-    public CRUDTargetInvoker(Operation operation, String directory) {
-        this.operation = METHODS.get(operation.getName());
-        this.instance = new CRUDImpl(directory);
+    public Object invokeTarget(Object body, short sequence, WorkContext context) throws InvocationTargetException {
+        Object[] args = (Object[])body;
+        if (operation.getName().equals("create")) {
+            return resourceManager.createResource(args[0]);
+            
+        } else if (operation.getName().equals("retrieve")) {
+            return resourceManager.retrieveResource((String)args[0]);
+            
+        } else if (operation.getName().equals("update")) {
+            return resourceManager.updateResource((String)args[0], args[1]);
+            
+        } else if (operation.getName().equals("delete")) {
+            resourceManager.deleteResource((String)args[0]);
+        }
+        return null;
+    }
 
+    public boolean isCacheable() {
+        return false;
     }
 
-    public Object invokeTarget(Object body, short sequence, WorkContext context) throws InvocationTargetException {
-        try {
-            return operation.invoke(instance, (Object[])body);
-        } catch (IllegalArgumentException e) {
-            throw new AssertionError(e);
-        } catch (IllegalAccessException e) {
-            throw new AssertionError(e);
-        }
+    public boolean isOptimizable() {
+        return false;
     }
 
+    public void setCacheable(boolean cacheable) {
+    }
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
 }

Added: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/ResourceManager.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/ResourceManager.java?view=auto&rev=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/ResourceManager.java (added)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/ResourceManager.java Mon Apr 23 19:18:54 2007
@@ -0,0 +1,109 @@
+/*
+ * 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 crud;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A fake resource manager implementation used as a backend by the sample
+ * CRUD component implementation.
+ *  
+ * @version $Rev$ $Date$
+ */
+public class ResourceManager implements CRUD {
+    private static int counter;
+    private static final Map<String, Object> store = new HashMap<String, Object>();
+    private String directory;
+
+    /**
+     * Constructs a new resource manager.
+     * 
+     * @param directory the directory where to persist resources
+     */
+    public ResourceManager(String directory) {
+        super();
+        this.directory = directory;
+    }
+
+    /**
+     * Creates a new resource.
+     * 
+     * @param resource
+     * @return
+     */
+    public String createResource(Object resource) {
+        System.out.println("create(" + resource + ") in " + directory);
+        String key = String.valueOf(counter++);
+        store.put(key, resource);
+        return key;
+    }
+
+    /**
+     * Deletes a resource.
+     * 
+     * @param id
+     */
+    public void deleteResource(String id) {
+        System.out.println("delete(" + id + ")");
+        store.remove(id);
+    }
+
+    /**
+     * Retrieves a resource.
+     * 
+     * @param id
+     * @return
+     */
+    public Object retrieveResource(String id) {
+        System.out.println("retrieve(" + id + ")");
+        return store.get(id);
+    }
+
+    /**
+     * Updates a resource.
+     * 
+     * @param id
+     * @param resource
+     * @return
+     */
+    public Object updateResource(String id, Object resource) {
+        System.out.println("update(" + id + ")");
+        return store.put(id, resource);
+    }
+
+    //FIXME We shouldn't have to implement the CRUD interface here
+    
+    public String create(Object resource) {
+        return createResource(resource);
+    }
+    
+    public Object retrieve(String id) {
+        return retrieveResource(id);
+    }
+    
+    public Object update(String id, Object resource) {
+        return updateResource(id, resource);
+    }
+    
+    public void delete(String id) {
+        deleteResource(id);
+    }
+}

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/ResourceManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/samples/implementation-crud/src/main/java/crud/ResourceManager.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/crud.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/crud.composite?view=diff&rev=531681&r1=531680&r2=531681
==============================================================================
--- incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/crud.composite (original)
+++ incubator/tuscany/java/sca/samples/implementation-crud/src/main/resources/crud.composite Mon Apr 23 19:18:54 2007
@@ -17,10 +17,13 @@
     * specific language governing permissions and limitations
     * under the License.    
 -->
-<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="CRUDComposite">
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+	xmlns:sc="http://sample/crud"
+	xmlns:c="http://crud"
+	name="crud">
 
     <component name="CRUDServiceComponent">
-        <implementation.crud diretory="C:\\Temp" />
+        <c:implementation.crud directory="tmp" />
     </component>
 
 </composite>



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org