Author: lresende
Date: Wed Sep 26 14:27:48 2007
New Revision: 579806
URL: http://svn.apache.org/viewvc?rev=579806&view=rev
Log:
Updates to implementation.das to support componentType side file
Added:
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/Command.java
(with props)
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCase.java
- copied, changed from r578533,
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCaseFIXME.java
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/company.xml
- copied unchanged from r579798,
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/CompanyConfig.xml
Removed:
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCaseFIXME.java
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/CompanyConfig.xml
Modified:
incubator/tuscany/java/sca/modules/data-engine-helper/src/main/java/org/apache/tuscany/sca/data/engine/DataAccessEngineManager.java
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementation.java
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementationProcessor.java
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/provider/DASInvoker.java
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/DASTestCase.java
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyService.java
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/company.composite
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/das.composite
Modified:
incubator/tuscany/java/sca/modules/data-engine-helper/src/main/java/org/apache/tuscany/sca/data/engine/DataAccessEngineManager.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/data-engine-helper/src/main/java/org/apache/tuscany/sca/data/engine/DataAccessEngineManager.java?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/data-engine-helper/src/main/java/org/apache/tuscany/sca/data/engine/DataAccessEngineManager.java
(original)
+++
incubator/tuscany/java/sca/modules/data-engine-helper/src/main/java/org/apache/tuscany/sca/data/engine/DataAccessEngineManager.java
Wed Sep 26 14:27:48 2007
@@ -112,7 +112,7 @@
InputStream configStream = null;
try {
- configStream = this.getClass().getResourceAsStream(config);
+ configStream =
this.getClass().getClassLoader().getResourceAsStream(config);
} catch (Exception e) {
throw new MissingConfigFileException(config);
}
Modified:
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementation.java?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementation.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementation.java
Wed Sep 26 14:27:48 2007
@@ -18,15 +18,10 @@
*/
package org.apache.tuscany.sca.implementation.das;
-import java.util.Collections;
-import java.util.List;
-
import org.apache.tuscany.sca.assembly.AssemblyFactory;
-import org.apache.tuscany.sca.assembly.ConstrainingType;
import org.apache.tuscany.sca.assembly.Implementation;
-import org.apache.tuscany.sca.assembly.Property;
-import org.apache.tuscany.sca.assembly.Reference;
import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.assembly.impl.ComponentTypeImpl;
import org.apache.tuscany.sca.data.engine.config.ConnectionInfo;
import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
@@ -39,9 +34,8 @@
*
* @version $Rev$ $Date$
*/
-public class DASImplementation implements Implementation {
+public class DASImplementation extends ComponentTypeImpl implements
Implementation {
- private Service dasService;
private String dasConfig;
private String dataAccessType;
private ConnectionInfo connectionInfo;
@@ -54,6 +48,7 @@
// DAS implementation always provide a single service exposing
// the DAS interface, and have no references and properties
+ Service dasService = null;
dasService = assemblyFactory.createService();
dasService.setName("DAS");
JavaInterface javaInterface;
@@ -65,6 +60,8 @@
JavaInterfaceContract interfaceContract =
javaFactory.createJavaInterfaceContract();
interfaceContract.setInterface(javaInterface);
dasService.setInterfaceContract(interfaceContract);
+
+ this.getServices().add(dasService);
}
public String getConfig() {
@@ -89,47 +86,5 @@
public void setConnectionInfo(ConnectionInfo connectionInfo) {
this.connectionInfo = connectionInfo;
- }
-
- public ConstrainingType getConstrainingType() {
- // The sample DAS implementation does not support constrainingTypes
- return null;
- }
-
- public List<Property> getProperties() {
- // The sample DAS implementation does not support properties
- return Collections.emptyList();
- }
-
- public List<Service> getServices() {
- // The sample DAS implementation provides a single fixed CRUD service
- return Collections.singletonList(dasService);
- }
-
- public List<Reference> getReferences() {
- // The sample DAS implementation does not support properties
- return Collections.emptyList();
- }
-
- public String getURI() {
- // The sample DAS implementation does not have a URI
- return null;
- }
-
- public void setConstrainingType(ConstrainingType constrainingType) {
- // The sample DAS implementation does not support constrainingTypes
- }
-
- public void setURI(String uri) {
- // The sample DAS implementation does not have a URI
- }
-
- public boolean isUnresolved() {
- // The sample DAS implementation is always resolved
- return false;
- }
-
- public void setUnresolved(boolean unresolved) {
- // The sample DAS implementation is always resolved
}
}
Modified:
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementationProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementationProcessor.java?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementationProcessor.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/DASImplementationProcessor.java
Wed Sep 26 14:27:48 2007
@@ -20,6 +20,9 @@
import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
@@ -27,6 +30,9 @@
import javax.xml.stream.XMLStreamWriter;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Service;
import org.apache.tuscany.sca.assembly.xml.Constants;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
@@ -54,11 +60,14 @@
private DASImplementationFactory dasFactory;
+ private final AssemblyFactory assemblyFactory;
+ private final JavaInterfaceFactory javaFactory;
+
private StAXArtifactProcessor<ConnectionInfo> connectionInfoProcessor;
public DASImplementationProcessor(ModelFactoryExtensionPoint
modelFactories) {
- AssemblyFactory assemblyFactory =
modelFactories.getFactory(AssemblyFactory.class);
- JavaInterfaceFactory javaFactory =
modelFactories.getFactory(JavaInterfaceFactory.class);
+ assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+ javaFactory = modelFactories.getFactory(JavaInterfaceFactory.class);
this.dasFactory = new DefaultDASImplementationFactory(assemblyFactory,
javaFactory);
@@ -104,6 +113,7 @@
DASImplementation implementation =
dasFactory.createDASImplementation();
implementation.setConfig(config);
implementation.setDataAccessType(dataAccessType);
+ implementation.setUnresolved(true);
while (true) {
int event = reader.next();
@@ -127,6 +137,13 @@
}
public void resolve(DASImplementation impl, ModelResolver resolver) throws
ContributionResolveException {
+ if( impl != null && impl.isUnresolved()) {
+ //resolve component type
+ mergeComponentType(resolver, impl);
+
+ //set current implementation resolved
+ impl.setUnresolved(false);
+ }
}
public void write(DASImplementation implementation, XMLStreamWriter
writer) throws ContributionWriteException, XMLStreamException {
@@ -145,5 +162,81 @@
}
writer.writeEndElement();
+ }
+
+ /**
+ * Merge the componentType from introspection and external file
+ * @param resolver
+ * @param impl
+ */
+ private void mergeComponentType(ModelResolver resolver, DASImplementation
impl) {
+ // FIXME: Need to clarify how to merge
+ ComponentType componentType = getComponentType(resolver, impl);
+ if (componentType != null && !componentType.isUnresolved()) {
+ /*
+ Map<String, Reference> refMap = new HashMap<String, Reference>();
+ for (Reference ref : impl.getReferences()) {
+ refMap.put(ref.getName(), ref);
+ }
+ for (Reference reference : componentType.getReferences()) {
+ refMap.put(reference.getName(), reference);
+ }
+ impl.getReferences().clear();
+ impl.getReferences().addAll(refMap.values());
+
+ // Try to match references by type
+ Map<String, JavaElementImpl> refMembers =
impl.getReferenceMembers();
+ for (Reference ref : impl.getReferences()) {
+ if (ref.getInterfaceContract() != null) {
+ Interface i = ref.getInterfaceContract().getInterface();
+ if (i instanceof JavaInterface) {
+ Class<?> type = ((JavaInterface)i).getJavaClass();
+ if (!refMembers.containsKey(ref.getName())) {
+ JavaElementImpl e = getMemeber(impl,
ref.getName(), type);
+ if (e != null) {
+ refMembers.put(ref.getName(), e);
+ }
+ }
+ }
+ }
+ }*/
+
+ Map<String, Service> serviceMap = new HashMap<String, Service>();
+ for (Service svc : impl.getServices()) {
+ if(svc != null) {
+ serviceMap.put(svc.getName(), svc);
+ }
+ }
+ for (Service service : componentType.getServices()) {
+ serviceMap.put(service.getName(), service);
+ }
+ impl.getServices().clear();
+ impl.getServices().addAll(serviceMap.values());
+
+ Map<String, Property> propMap = new HashMap<String, Property>();
+ for (Property prop : impl.getProperties()) {
+ propMap.put(prop.getName(), prop);
+ }
+ }
+ }
+
+ private String getFileName(String filePath) {
+ int pos = filePath.lastIndexOf(".");
+
+ return filePath.substring(0, pos);
+
+ }
+
+ private ComponentType getComponentType(ModelResolver resolver,
DASImplementation impl) {
+ String dasConfig = this.getFileName(impl.getConfig());
+ String componentTypeURI = dasConfig.replace('.', '/') +
".componentType";
+ ComponentType componentType = assemblyFactory.createComponentType();
+ componentType.setUnresolved(true);
+ componentType.setURI(componentTypeURI);
+ componentType = resolver.resolveModel(ComponentType.class,
componentType);
+ if (!componentType.isUnresolved()) {
+ return componentType;
+ }
+ return null;
}
}
Added:
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/Command.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/Command.java?rev=579806&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/Command.java
(added)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/Command.java
Wed Sep 26 14:27:48 2007
@@ -0,0 +1,32 @@
+/*
+ * 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.sca.implementation.das.annotations;
+
+public @interface Command {
+ enum TYPE {SELECT, INSERT, DELETE, UPDATE}
+
+ /**
+ * Defines an Ad hoc command query
+ * @return
+ */
+ public String query() default "";
+
+ public TYPE type() default TYPE.SELECT;
+}
Propchange:
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/Command.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/annotations/Command.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/provider/DASInvoker.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/provider/DASInvoker.java?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/provider/DASInvoker.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/main/java/org/apache/tuscany/sca/implementation/das/provider/DASInvoker.java
Wed Sep 26 14:27:48 2007
@@ -20,8 +20,10 @@
package org.apache.tuscany.sca.implementation.das.provider;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import org.apache.tuscany.sca.data.engine.DataAccessEngine;
+import org.apache.tuscany.sca.implementation.das.annotations.Command;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
@@ -57,6 +59,14 @@
}
public Object doTheWork(Object[] args) throws InvocationTargetException {
+ //check annotation
+// try {
+// Method methodDeclaration =
this.getClass().getMethod(operation.getName(), null);
+//
methodDeclaration.getAnnotation(org.apache.tuscany.sca.implementation.das.annotations.Command.class);
+// } catch (Exception e) {
+// //ignore
+// }
+
//check if static way
if (operation.getName().equals("executeCommand")) {
String commandName, xPath;
@@ -72,6 +82,7 @@
return this.dataAccessEngine.executeCommand(commandName,
xPath);
}
} else { // dynamic mapping to command
+
return this.dataAccessEngine.executeCommand(operation.getName());
}
}
Modified:
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/DASTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/DASTestCase.java?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/DASTestCase.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/DASTestCase.java
Wed Sep 26 14:27:48 2007
@@ -41,7 +41,7 @@
@Override
protected void setUp() throws Exception {
scaDomain = SCADomain.newInstance("das.composite");
- dasService = scaDomain.getService(DAS.class, "DASServiceComponent");
+ dasService = scaDomain.getService(DAS.class,
"DASServiceComponent/DAS");
}
Modified:
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyService.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyService.java?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyService.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyService.java
Wed Sep 26 14:27:48 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.implementation.das.company;
+import org.apache.tuscany.sca.implementation.das.annotations.Command;
+
import commonj.sdo.DataObject;
/**
@@ -26,7 +28,6 @@
* @version $Rev$ $Date$
*/
public interface CompanyService {
-
+ @Command(query="select * from COMPANY")
public DataObject getCompanies();
-
}
Copied:
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCase.java
(from r578533,
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCaseFIXME.java)
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCase.java?p2=incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCase.java&p1=incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCaseFIXME.java&r1=578533&r2=579806&rev=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCaseFIXME.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/test/java/org/apache/tuscany/sca/implementation/das/company/CompanyServiceTestCase.java
Wed Sep 26 14:27:48 2007
@@ -28,7 +28,7 @@
/**
* Tests the DAS service
*/
-public class CompanyServiceTestCaseFIXME extends TestCase {
+public class CompanyServiceTestCase extends TestCase {
private SCADomain scaDomain;
private CompanyService dasCompanyService;
@@ -39,7 +39,7 @@
@Override
protected void setUp() throws Exception {
scaDomain = SCADomain.newInstance("company.composite");
- dasCompanyService = scaDomain.getService(CompanyService.class,
"CompanyComponent/CompanyServiceComponent");
+ dasCompanyService = scaDomain.getService(CompanyService.class,
"CompanyServiceComponent/CompanyService");
}
/**
@@ -52,8 +52,9 @@
public void testGetCompanies() throws Exception {
DataObject root = dasCompanyService.getCompanies();
- assertNotNull(root);
+ assertNotNull(root);
+ String nome = root.getString("COMPANY[1]/NAME");
+ assertEquals("ACME Publishing", root.getString("COMPANY[1]/NAME"));
}
-
}
Modified:
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/company.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/company.composite?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/company.composite
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/company.composite
Wed Sep 26 14:27:48 2007
@@ -22,19 +22,14 @@
targetNamespace="http://sample/das"
name="das">
- <component name="CompanyComponent">
- <tuscany:implementation.das config="/CompanyConfig.xml"
dataAccessType="rdb">
- <tuscany:connectionInfo>
- <tuscany:connectionProperties
-
driverClass="org.apache.derby.jdbc.EmbeddedDriver"
-
databaseURL="jdbc:derby:target/test-classes/dastest; create = true"
- loginTimeout="600000"/>
- </tuscany:connectionInfo>
+ <component name="CompanyServiceComponent">
+ <tuscany:implementation.das config="company.xml" dataAccessType="rdb">
+ <tuscany:connectionInfo>
+ <tuscany:connectionProperties
+
driverClass="org.apache.derby.jdbc.EmbeddedDriver"
+
databaseURL="jdbc:derby:target/test-classes/dastest; create = true"
+ loginTimeout="600000"/>
+ </tuscany:connectionInfo>
</tuscany:implementation.das>
-
- <service name="CompanyServiceComponent">
- <interface.java
interface="org.apache.tuscany.sca.implementation.das.company.CompanyService"/>
- </service>
-
</component>
</composite>
Modified:
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/das.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/das.composite?rev=579806&r1=579805&r2=579806&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/das.composite
(original)
+++
incubator/tuscany/java/sca/modules/implementation-das/src/test/resources/das.composite
Wed Sep 26 14:27:48 2007
@@ -23,7 +23,7 @@
name="das">
<component name="DASServiceComponent">
- <tuscany:implementation.das config="/CompanyConfig.xml"
dataAccessType="rdb">
+ <tuscany:implementation.das config="company.xml" dataAccessType="rdb">
<tuscany:connectionInfo>
<tuscany:connectionProperties
driverClass="org.apache.derby.jdbc.EmbeddedDriver"
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]