Author: rfeng
Date: Tue Nov 28 14:36:05 2006
New Revision: 480258
URL: http://svn.apache.org/viewvc?view=rev&rev=480258
Log:
Add clone support for ServiceContract/Operation/DataType
Refactor the operation from DataType.metadata to a field
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/IDLTransformerTestCase.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
Tue Nov 28 14:36:05 2006
@@ -79,12 +79,10 @@
DataType<DataType> targetType =
new DataType<DataType>("idl:output", Object.class,
targetOperation.getOutputType());
- targetType.setMetadata(Operation.class.getName(),
targetOperation.getOutputType().getMetadata(
- Operation.class.getName()));
+
targetType.setOperation(targetOperation.getOutputType().getOperation());
DataType<DataType> sourceType =
new DataType<DataType>("idl:output", Object.class,
sourceOperation.getOutputType());
- sourceType.setMetadata(Operation.class.getName(),
sourceOperation.getOutputType().getMetadata(
- Operation.class.getName()));
+
sourceType.setOperation(sourceOperation.getOutputType().getOperation());
result = transform(result, targetType, sourceType);
resultMsg.setBody(result);
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
Tue Nov 28 14:36:05 2006
@@ -109,7 +109,7 @@
@SuppressWarnings("unchecked")
public Object[] transform(Object[] source, TransformationContext context) {
DataType<List<DataType<?>>> sourceType = context.getSourceDataType();
- Operation<?> sourceOp =
(Operation<?>)sourceType.getMetadata(Operation.class.getName());
+ Operation<?> sourceOp = (Operation<?>)sourceType.getOperation();
boolean sourceWrapped = sourceOp != null && sourceOp.isWrapperStyle();
WrapperHandler sourceWrapperHandler = null;
@@ -118,7 +118,7 @@
}
DataType<List<DataType<QName>>> targetType =
context.getTargetDataType();
- Operation<?> targetOp =
(Operation<?>)targetType.getMetadata(Operation.class.getName());
+ Operation<?> targetOp = (Operation<?>)targetType.getOperation();
boolean targetWrapped = targetOp != null && targetOp.isWrapperStyle();
WrapperHandler targetWrapperHandler = null;
if (targetWrapped) {
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
Tue Nov 28 14:36:05 2006
@@ -129,7 +129,7 @@
public Object transform(Object response, TransformationContext context) {
try {
DataType<DataType> sourceType = context.getSourceDataType();
- Operation<?> sourceOp =
(Operation<?>)sourceType.getMetadata(Operation.class.getName());
+ Operation<?> sourceOp = (Operation<?>)sourceType.getOperation();
boolean sourceWrapped = sourceOp != null &&
sourceOp.isWrapperStyle();
WrapperHandler sourceWrapperHandler = null;
if (sourceWrapped) {
@@ -137,7 +137,7 @@
}
DataType<DataType> targetType = context.getTargetDataType();
- Operation<?> targetOp =
(Operation<?>)targetType.getMetadata(Operation.class.getName());
+ Operation<?> targetOp = (Operation<?>)targetType.getOperation();
boolean targetWrapped = targetOp != null &&
targetOp.isWrapperStyle();
WrapperHandler targetWrapperHandler = null;
if (targetWrapped) {
Modified:
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/IDLTransformerTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/IDLTransformerTestCase.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/IDLTransformerTestCase.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/IDLTransformerTestCase.java
Tue Nov 28 14:36:05 2006
@@ -72,8 +72,6 @@
+ " </items>"
+ "</order1>";
- private static final String OPERATION_KEY =
org.apache.tuscany.spi.model.Operation.class.getName();
-
private static final String URI_ORDER_XSD = "http://example.com/order.xsd";
/**
@@ -113,7 +111,7 @@
null);
op.setDataBinding(DOMDataBinding.NAME);
- inputType0.setMetadata(OPERATION_KEY, op);
+ inputType0.setOperation(op);
op.setWrapperStyle(true);
ElementInfo inputElement =
new ElementInfo(new QName(URI_ORDER_XSD, "checkOrderStatus"), new
TypeInfo(null, false, null));
@@ -131,9 +129,9 @@
orderType.setMetadata(ElementInfo.class.getName(), order);
flagType.setMetadata(ElementInfo.class.getName(), flag);
- customerIdType.setMetadata(OPERATION_KEY, op);
- orderType.setMetadata(OPERATION_KEY, op);
- flagType.setMetadata(OPERATION_KEY, op);
+ customerIdType.setOperation(op);
+ orderType.setOperation(op);
+ flagType.setOperation(op);
List<ElementInfo> inputElements = new ArrayList<ElementInfo>();
inputElements.add(customerId);
@@ -144,7 +142,7 @@
new ElementInfo(new QName("", "status"),
SimpleTypeMapperExtension.XSD_SIMPLE_TYPES.get("string"));
statusType.setMetadata(ElementInfo.class.getName(), statusElement);
- statusType.setMetadata(OPERATION_KEY, op);
+ statusType.setOperation(op);
List<ElementInfo> outputElements = new ArrayList<ElementInfo>();
outputElements.add(statusElement);
@@ -154,7 +152,7 @@
null));
responseType.setMetadata(ElementInfo.class.getName(), inputElement);
- responseType.setMetadata(OPERATION_KEY, op);
+ responseType.setOperation(op);
WrapperInfo wrapperInfo =
new WrapperInfo(inputElement, outputElement, inputElements,
outputElements, inputType, statusType);
@@ -196,7 +194,7 @@
TransformationContext context1 = new TransformationContextImpl();
DataType<DataType> sourceType =
new DataType<DataType>("idl:output", Object.class,
op.getOutputType());
- sourceType.setMetadata(OPERATION_KEY,
op.getOutputType().getMetadata(OPERATION_KEY));
+ sourceType.setOperation(op.getOutputType().getOperation());
context1.setSourceDataType(sourceType);
DataType<DataType> targetType =
Modified:
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
(original)
+++
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
Tue Nov 28 14:36:05 2006
@@ -34,14 +34,16 @@
*
* @version $Rev$ $Date$
*/
-public class DataType<L> extends ModelObject {
+public class DataType<L> extends ModelObject implements Cloneable {
private String dataBinding = Object.class.getName();
private final Type physical;
private final L logical;
- private final Map<String, Object> metadata = new HashMap<String, Object>();
+ private HashMap<String, Object> metadata = new HashMap<String, Object>();
+
+ private Operation operation;
/**
* Construct a data type specifying the physical and logical types.
@@ -122,7 +124,7 @@
public String getDataBinding() {
if (dataBinding == null) {
// databinding is not set at the DataType level, check the
operation
- Operation<?> operation = (Operation<?>)
getMetadata(Operation.class.getName());
+ Operation<?> operation = (Operation<?>) getOperation();
if (operation != null) {
return operation.getDataBinding();
}
@@ -218,6 +220,22 @@
StringBuffer sb = new StringBuffer();
sb.append(physical).append(" ").append(dataBinding).append("
").append(logical);
return sb.toString();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected Object clone() throws CloneNotSupportedException {
+ DataType<L> copy = (DataType<L>)super.clone();
+ copy.metadata = (HashMap<String, Object>)this.metadata.clone();
+ return copy;
+ }
+
+ public Operation getOperation() {
+ return operation;
+ }
+
+ public void setOperation(Operation operation) {
+ this.operation = operation;
}
}
Modified:
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
(original)
+++
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
Tue Nov 28 14:36:05 2006
@@ -18,6 +18,7 @@
*/
package org.apache.tuscany.spi.model;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -31,13 +32,12 @@
*
* @version $Rev$ $Date$
*/
-public class Operation<T> {
+public class Operation<T> extends ModelObject implements Cloneable {
public static final int NO_CONVERSATION = -1;
public static final int CONVERSATION_CONTINUE = 1;
public static final int CONVERSATION_END = 2;
- private static final String NAME = Operation.class.getName();
- protected Map<String, Object> metaData;
+ protected HashMap<String, Object> metaData;
private final String name;
private ServiceContract<T> contract;
private final DataType<T> outputType;
@@ -94,12 +94,13 @@
this.dataBinding = dataBinding;
this.conversationSequence = sequence;
// Register the operation with the types
+ this.inputType.setOperation(this);
for (DataType<?> d : this.inputType.getLogical()) {
- d.setMetadata(NAME, this);
+ d.setOperation(this);
}
- this.outputType.setMetadata(NAME, this);
+ this.outputType.setOperation(this);
for (DataType<?> d : this.faultTypes) {
- d.setMetadata(NAME, this);
+ d.setOperation(this);
}
}
@@ -363,6 +364,39 @@
*/
public void setWrapperStyle(boolean wrapperStyle) {
this.wrapperStyle = wrapperStyle;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected Object clone() throws CloneNotSupportedException {
+ final List<DataType<T>> clonedFaultTypes = new
ArrayList<DataType<T>>(this.faultTypes.size());
+ for (DataType<T> t : this.faultTypes) {
+ clonedFaultTypes.add((DataType<T>)t.clone());
+ }
+
+ List<DataType<T>> clonedTypes = new ArrayList<DataType<T>>();
+ for (DataType<T> t : inputType.getLogical()) {
+ DataType<T> type = (DataType<T>)t.clone();
+ clonedTypes.add(type);
+ }
+
+ DataType<List<DataType<T>>> clonedInputType =
+ new DataType<List<DataType<T>>>(inputType.getPhysical(),
clonedTypes);
+ clonedInputType.setDataBinding(inputType.getDataBinding());
+
+ Operation<T> copy =
+ new Operation<T>(name, clonedInputType,
(DataType<T>)outputType.clone(), clonedFaultTypes, nonBlocking,
+ dataBinding, conversationSequence);
+
+ copy.callback = this.callback;
+ copy.contract = this.contract;
+ copy.wrapper = this.wrapper;
+ copy.wrapperStyle = this.wrapperStyle;
+
+ if (this.metaData != null) {
+ copy.metaData = (HashMap)this.metaData.clone();
+ }
+ return copy;
}
Modified:
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
(original)
+++
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
Tue Nov 28 14:36:05 2006
@@ -27,7 +27,7 @@
*
* @version $Rev$ $Date$
*/
-public abstract class ServiceContract<T> extends ModelObject {
+public abstract class ServiceContract<T> extends ModelObject implements
Cloneable {
protected InteractionScope interactionScope;
protected boolean remotable;
protected Class<?> interfaceClass;
@@ -37,7 +37,7 @@
protected Map<String, Operation<T>> operations;
protected Map<String, Operation<T>> callbackOperations;
protected String dataBinding;
- protected Map<String, Object> metaData;
+ protected HashMap<String, Object> metaData;
protected ServiceContract() {
}
@@ -242,5 +242,33 @@
return super.toString();
}
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected Object clone() throws CloneNotSupportedException {
+ ServiceContract<T> copy = (ServiceContract<T>)super.clone();
+
+ if (operations != null) {
+ Map<String, Operation<T>> clonedOperations = new HashMap<String,
Operation<T>>();
+ for (Operation<T> o : operations.values()) {
+ clonedOperations.put(o.getName(), o);
+ }
+ copy.setOperations(clonedOperations);
+ }
+
+ if (callbackOperations != null) {
+ Map<String, Operation<T>> clonedCallbackOperations = new
HashMap<String, Operation<T>>();
+ for (Operation<T> o : callbackOperations.values()) {
+ clonedCallbackOperations.put(o.getName(),
(Operation<T>)o.clone());
+ }
+ copy.setCallbackOperations(clonedCallbackOperations);
+ }
+
+ if (this.metaData != null) {
+ copy.metaData = (HashMap)this.metaData.clone();
+ }
+
+ return copy;
}
}
Modified:
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java
(original)
+++
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java
Tue Nov 28 14:36:05 2006
@@ -51,6 +51,23 @@
assertEquals(contract, operation.getServiceContract());
assertTrue(operation.isCallback());
}
+
+ @SuppressWarnings("unchecked")
+ public void testClone() throws Exception {
+ ServiceContract<Type> contract = new TestContract();
+ Operation<Type> operation = new Operation<Type>("foo", null, null,
null, false, null, NO_CONVERSATION);
+ Map<String, Operation<Type>> ops = new HashMap<String,
Operation<Type>>();
+ ops.put("foo", operation);
+ contract.setOperations(ops);
+
+ operation = new Operation<Type>("bar", null, null, null, false, null,
NO_CONVERSATION);
+ Map<String, Operation<Type>> callbackOps = new HashMap<String,
Operation<Type>>();
+ ops.put("bar", operation);
+ contract.setCallbackOperations(callbackOps);
+
+ ServiceContract<Type> copy = (ServiceContract<Type>) contract.clone();
+ assertEquals(contract, copy);
+ }
private class TestContract extends ServiceContract<Type> {
Modified:
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
(original)
+++
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
Tue Nov 28 14:36:05 2006
@@ -51,7 +51,7 @@
DataType<?> bindingContext = source ? tContext.getSourceDataType() :
tContext.getTargetDataType();
String contextPath =
(String)bindingContext.getMetadata(JAXB_CONTEXT_PATH);
if (contextPath == null) {
- Operation op =
(Operation)bindingContext.getMetadata(Operation.class.getName());
+ Operation op = (Operation)bindingContext.getOperation();
contextPath = op != null ?
(String)op.getMetaData().get(JAXB_CONTEXT_PATH) : null;
}
JAXBContext context = null;
Modified:
incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java?view=diff&rev=480258&r1=480257&r2=480258
==============================================================================
---
incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java
(original)
+++
incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java
Tue Nov 28 14:36:05 2006
@@ -50,7 +50,6 @@
* Metadata for a WSDL operation
*/
public class WSDLOperation {
- private static final String OPERATION_KEY =
org.apache.tuscany.spi.model.Operation.class.getName();
protected XMLSchemaRegistry schemaRegistry;
@@ -199,16 +198,16 @@
operationModel.setWrapper(getWrapper().getWrapperInfo());
// Register the operation with the types
for (DataType<?> d :
wrapper.getUnwrappedInputType().getLogical()) {
- d.setMetadata(OPERATION_KEY, operationModel);
+ d.setOperation(operationModel);
}
if (wrapper.getUnwrappedOutputType() != null) {
-
wrapper.getUnwrappedOutputType().setMetadata(OPERATION_KEY, operationModel);
+
wrapper.getUnwrappedOutputType().setOperation(operationModel);
}
}
}
- inputType.setMetadata(OPERATION_KEY, operationModel);
+ inputType.setOperation(operationModel);
if (outputType != null) {
- outputType.setMetadata(OPERATION_KEY, operationModel);
+ outputType.setOperation(operationModel);
}
return operationModel;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]