diff options
Diffstat (limited to 'branches/sca-java-2.0-M4/modules/databinding/src/main/java')
75 files changed, 0 insertions, 8722 deletions
diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java deleted file mode 100644 index 7c4ed35eb3..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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.databinding; - - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * DataBinding represents a data representation, for example, SDO, JAXB and AXIOM - * - * @version $Rev$ $Date$ - */ -public interface DataBinding { - /** - * A special databinding for input message of an operation - */ - String IDL_INPUT = "idl:input"; - /** - * A special databinding for output message of an operation - */ - String IDL_OUTPUT = "idl:output"; - /** - * A special databinding for fault message of an operation - */ - String IDL_FAULT = "idl:fault"; - /** - * The name of a databinding should be case-insensitive and unique - * - * @return The name of the databinding - */ - String getName(); - - /** - * Introspect and populate information to a DataType model - * - * @param dataType The data type to be introspected - * @param operation The operation - * @return true if the databinding has recognized the given data type - */ - boolean introspect(DataType dataType, Operation operation); - - /** - * Introspect the data to figure out the corresponding data type - * - * @param value The object to be checked - * @param operation The operation - * @return The DataType or null if the java type is not supported by this databinding - */ - DataType introspect(Object value, Operation operation); - - /** - * Provide a WrapperHandler for this databinding - * @return A wrapper handler which can handle wrapping/wrapping for this databinding - */ - WrapperHandler getWrapperHandler(); - - /** - * Make a copy of the object for "pass-by-value" semantics. - * - * @param object source object to copy - * @param dataType The data type - * @param operation The operation - * @return copy of the object passed in as argument - */ - Object copy(Object object, DataType dataType, Operation operation); - - /** - * Get the XML type helper for Java types - * @return The databinding-specific XML type helper class - */ - XMLTypeHelper getXMLTypeHelper(); - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java deleted file mode 100644 index 2ff5d866b4..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.databinding; - - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * An extension point for data binding extensions. - * - * @version $Rev$ $Date$ - */ -public interface DataBindingExtensionPoint { - - /** - * Register a data binding - * - * @param dataBinding - */ - void addDataBinding(DataBinding dataBinding); - - /** - * Look up a data binding by id - * - * @param id The name of the databinding - * @return The databinding - */ - DataBinding getDataBinding(String id); - - /** - * Unregister a data binding - * - * @param id - * @return The unregistered databinding - */ - DataBinding removeDataBinding(String id); - - /** - * Introspect the java class to figure out what DataType supports it. - * - * @param dataType The initial data type - * @param operation TODO - * @return A DataType representing the java type or null if no databinding - * recognizes the java type - */ - boolean introspectType(DataType dataType, Operation operation); - - /** - * Introspect the value to figure out the corresponding DataType - * - * @param value The object value - * @param operation TODO - * @return A DataType representing the value or null if no databinding - * recognizes the value - */ - DataType introspectType(Object value, Operation operation); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataPipe.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataPipe.java deleted file mode 100644 index 505a810276..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataPipe.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.databinding; - -/** - * Data pipe allows a data source pushes data into its sink and pipe the data into its result - * - * @param <S> The data binding type of the sink - * @param <R> The data binding type of the result - * - * @version $Rev$ $Date$ - */ -public interface DataPipe<S, R> { - - /** - * Returns a sink (for example, java.io.OutputStream, java.io.Writer or org.xml.sax.ContentHandler) to receive data - * pushed by the source - * - * @return The sink to consume data - */ - S getSink(); - - /** - * Returns the data populated by the sink - * - * @return - */ - R getResult(); - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataPipeTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataPipeTransformer.java deleted file mode 100644 index 1aac6d48be..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataPipeTransformer.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.databinding; - -/** - * Data pipe allows a data source pushes data into its sink and pipe the data into its result - * - * @version $Rev$ $Date$ - */ -public interface DataPipeTransformer<S, R> extends Transformer { - - DataPipe<S, R> newInstance(); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java deleted file mode 100644 index 19455fcd29..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * 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.databinding; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding; -import org.apache.tuscany.sca.databinding.javabeans.JavaExceptionDataBinding; -import org.apache.tuscany.sca.extensibility.ServiceDeclaration; -import org.apache.tuscany.sca.extensibility.ServiceDiscovery; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * The default implementation of a data binding extension point. - * - * @version $Rev$ $Date$ - */ -public class DefaultDataBindingExtensionPoint implements DataBindingExtensionPoint { - private ExtensionPointRegistry registry; - private final Map<String, DataBinding> bindings = new HashMap<String, DataBinding>(); - private final List<DataBinding> databindings = new ArrayList<DataBinding>(); - private static final Logger logger = Logger.getLogger(DefaultDataBindingExtensionPoint.class.getName()); - private boolean loadedDataBindings; - - public DefaultDataBindingExtensionPoint() { - } - - public DefaultDataBindingExtensionPoint(ExtensionPointRegistry registry) { - this.registry = registry; - } - - public DataBinding getDataBinding(String id) { - if (id == null) { - return null; - } - DataBinding dataBinding = bindings.get(id.toLowerCase()); - if (dataBinding == null) { - loadDataBindings(); - dataBinding = bindings.get(id.toLowerCase()); - } - return dataBinding; - } - - public void addDataBinding(DataBinding dataBinding) { - if (logger.isLoggable(Level.FINE)) { - String className = dataBinding.getClass().getName(); - boolean lazy = false; - if (dataBinding instanceof LazyDataBinding) { - className = ((LazyDataBinding)dataBinding).dataBindingDeclaration.getClassName(); - lazy = true; - } - logger.fine("Adding databinding: " + className + ";name=" + dataBinding.getName() + ",lazy=" + lazy); - } - databindings.add(dataBinding); - bindings.put(dataBinding.getName().toLowerCase(), dataBinding); - - } - - public DataBinding removeDataBinding(String id) { - if (id == null) { - return null; - } - DataBinding dataBinding = bindings.remove(id.toLowerCase()); - if (dataBinding != null) { - databindings.remove(dataBinding); - } - return dataBinding; - } - - /** - * Dynamically load data bindings declared under META-INF/services - */ - private synchronized void loadDataBindings() { - if (loadedDataBindings) - return; - - // Get the databinding service declarations - Collection<ServiceDeclaration> dataBindingDeclarations; - try { - dataBindingDeclarations = registry.getServiceDiscovery().getServiceDeclarations(DataBinding.class.getName()); - } catch (IOException e) { - throw new IllegalStateException(e); - } - - // Load data bindings - for (ServiceDeclaration dataBindingDeclaration : dataBindingDeclarations) { - Map<String, String> attributes = dataBindingDeclaration.getAttributes(); - String name = attributes.get("name"); - - // Create a data binding wrapper and register it - DataBinding dataBinding = new LazyDataBinding(name, dataBindingDeclaration); - addDataBinding(dataBinding); - } - - loadedDataBindings = true; - } - - /** - * A data binding facade allowing data bindings to be lazily loaded and - * initialized. - */ - private class LazyDataBinding implements DataBinding { - - private String name; - private ServiceDeclaration dataBindingDeclaration; - private DataBinding dataBinding; - - private LazyDataBinding(String type, ServiceDeclaration dataBindingDeclaration) { - this.name = type; - this.dataBindingDeclaration = dataBindingDeclaration; - } - - /** - * Load and instantiate the data binding class. - * - * @return The data binding. - */ - @SuppressWarnings("unchecked") - private DataBinding getDataBinding() { - if (dataBinding == null) { - try { - Class<DataBinding> dataBindingClass = (Class<DataBinding>)dataBindingDeclaration.loadClass(); - try { - Constructor<DataBinding> constructor = dataBindingClass.getConstructor(); - dataBinding = constructor.newInstance(); - } catch (NoSuchMethodException e) { - Constructor<DataBinding> constructor = - dataBindingClass.getConstructor(ExtensionPointRegistry.class); - dataBinding = constructor.newInstance(DefaultDataBindingExtensionPoint.this.registry); - } - } catch (Exception e) { - throw new IllegalStateException(e); - } - } - return dataBinding; - } - - public Object copy(Object object, DataType dataType, Operation operation) { - return getDataBinding().copy(object, dataType, operation); - } - - public String getName() { - return name; - } - - public XMLTypeHelper getXMLTypeHelper() { - return getDataBinding().getXMLTypeHelper(); - } - - public WrapperHandler getWrapperHandler() { - return getDataBinding().getWrapperHandler(); - } - - public boolean introspect(DataType dataType, Operation operation) { - return getDataBinding().introspect(dataType, operation); - } - - public DataType introspect(Object value, Operation operation) { - return getDataBinding().introspect(value, operation); - } - } - - //FIXME The following methods should not be on the extension point - // they should be on a separate class - public boolean introspectType(DataType dataType, Operation operation) { - loadDataBindings(); - for (DataBinding binding : databindings) { - // don't introspect for JavaBeansDatabinding as all javatypes will - // anyways match to its basetype - // which is java.lang.Object. Default to this only if no databinding - // results - if (!binding.getName().equals(JavaBeansDataBinding.NAME)) { - if (binding.introspect(dataType, operation)) { - return true; - } - } - } - // FIXME: Should we honor the databinding from operation/interface - // level? - Class<?> physical = dataType.getPhysical(); - if (physical == Object.class) { - dataType.setDataBinding(JavaBeansDataBinding.NAME); - return false; - } - if (dataType.getPhysical().isArray()) { - introspectArray(dataType, operation); - return true; - } else if (Throwable.class.isAssignableFrom(physical)) { - dataType.setDataBinding(JavaExceptionDataBinding.NAME); - return true; - } else { - dataType.setDataBinding(JavaBeansDataBinding.NAME); - return false; - } - } - - private boolean introspectArray(DataType dataType, Operation operation) { - Class<?> physical = dataType.getPhysical(); - if (!physical.isArray() || physical == byte[].class) { - return false; - } - Class<?> componentType = physical.getComponentType(); - Type genericComponentType = componentType; - if(dataType.getGenericType() instanceof GenericArrayType) { - genericComponentType = ((GenericArrayType) dataType.getGenericType()).getGenericComponentType(); - } - DataType logical = new DataTypeImpl(dataType.getDataBinding(), componentType, genericComponentType, dataType.getLogical()); - introspectType(logical, operation); - dataType.setDataBinding("java:array"); - dataType.setLogical(logical); - return true; - } - - public DataType introspectType(Object value, Operation operation) { - loadDataBindings(); - DataType dataType = null; - for (DataBinding binding : databindings) { - // don't introspect for JavaBeansDatabinding as all javatypes will - // anyways match to its basetype - // which is java.lang.Object. Default to this only if no databinding - // results - if (!binding.getName().equals(JavaBeansDataBinding.NAME)) { - dataType = binding.introspect(value, operation); - } - if (dataType != null) { - return dataType; - } - } - return new DataTypeImpl<XMLType>(JavaBeansDataBinding.NAME, value.getClass(), XMLType.UNKNOWN); - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java deleted file mode 100644 index 39889b1e97..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * 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.databinding; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.impl.DirectedGraph; -import org.apache.tuscany.sca.extensibility.ServiceDeclaration; -import org.apache.tuscany.sca.extensibility.ServiceDiscovery; - -/** - * @version $Rev$ $Date$ - */ -public class DefaultTransformerExtensionPoint implements TransformerExtensionPoint { - private static final Logger logger = Logger.getLogger(DefaultTransformerExtensionPoint.class.getName()); - private boolean loadedTransformers; - - private ExtensionPointRegistry registry; - private final DirectedGraph<Object, Transformer> graph = new DirectedGraph<Object, Transformer>(); - - public DefaultTransformerExtensionPoint(ExtensionPointRegistry registry) { - this.registry = registry; - } - - public void addTransformer(String sourceType, String resultType, int weight, Transformer transformer, boolean publicTransformer) { - if (logger.isLoggable(Level.FINE)) { - String className = transformer.getClass().getName(); - boolean lazy = false; - boolean pull = (transformer instanceof PullTransformer); - if (transformer instanceof LazyPullTransformer) { - className = ((LazyPullTransformer)transformer).transformerDeclaration.getClassName(); - lazy = true; - } - if (transformer instanceof LazyPushTransformer) { - className = ((LazyPushTransformer)transformer).transformerDeclaration.getClassName(); - lazy = true; - } - - logger.fine("Adding transformer: " + className - + ";source=" - + sourceType - + ",target=" - + resultType - + ",weight=" - + weight - + ",type=" - + (pull ? "pull" : "push") - + ",lazy=" - + lazy); - } - graph.addEdge(sourceType, resultType, transformer, weight, publicTransformer); - } - - public void addTransformer(Transformer transformer, boolean publicTransformer) { - addTransformer(transformer.getSourceDataBinding(), - transformer.getTargetDataBinding(), - transformer.getWeight(), - transformer, publicTransformer); - } - - public boolean removeTransformer(String sourceType, String resultType) { - return graph.removeEdge(sourceType, resultType); - } - - public Transformer getTransformer(String sourceType, String resultType) { - loadTransformers(); - - DirectedGraph<Object, Transformer>.Edge edge = graph.getEdge(sourceType, resultType); - return (edge == null) ? null : edge.getValue(); - } - - /** - * Dynamically load transformers registered under META-INF/services. - * - */ - private synchronized void loadTransformers() { - if (loadedTransformers) { - return; - } - loadedTransformers = true; - loadTransformers(PullTransformer.class); - loadTransformers(PushTransformer.class); - - } - - /** - * Dynamically load transformers registered under META-INF/services. - * - * @param transformerClass - */ - private synchronized void loadTransformers(Class<?> transformerClass) { - - // Get the transformer service declarations - Collection<ServiceDeclaration> transformerDeclarations; - - try { - transformerDeclarations = registry.getServiceDiscovery().getServiceDeclarations(transformerClass.getName()); - - } catch (IOException e) { - throw new IllegalStateException(e); - } - - // Load transformers - for (ServiceDeclaration transformerDeclaration : transformerDeclarations) { - Map<String, String> attributes = transformerDeclaration.getAttributes(); - - String source = attributes.get("source"); - String target = attributes.get("target"); - int weight = Integer.valueOf(attributes.get("weight")); - String b = attributes.get("public"); - boolean pub = true; - if (b != null) { - pub = Boolean.valueOf(b); - } - - // Create a transformer wrapper and register it - Transformer transformer; - if (transformerClass == PullTransformer.class) { - transformer = new LazyPullTransformer(source, target, weight, transformerDeclaration); - } else { - transformer = new LazyPushTransformer(source, target, weight, transformerDeclaration); - } - addTransformer(transformer, pub); - } - } - - /** - * A transformer facade allowing transformers to be lazily loaded - * and initialized. - */ - private class LazyPullTransformer implements PullTransformer<Object, Object> { - - private String source; - private String target; - private int weight; - private ServiceDeclaration transformerDeclaration; - private PullTransformer<Object, Object> transformer; - - public LazyPullTransformer(String source, String target, int weight, ServiceDeclaration transformerDeclaration) { - this.source = source; - this.target = target; - this.weight = weight; - this.transformerDeclaration = transformerDeclaration; - } - - /** - * Load and instantiate the transformer class. - * - * @return The transformer. - */ - @SuppressWarnings("unchecked") - private PullTransformer<Object, Object> getTransformer() { - if (transformer == null) { - try { - Class<PullTransformer<Object, Object>> transformerClass = - (Class<PullTransformer<Object, Object>>)transformerDeclaration.loadClass(); - try { - Constructor<PullTransformer<Object, Object>> constructor = transformerClass.getConstructor(); - transformer = constructor.newInstance(); - } catch (NoSuchMethodException e) { - Constructor<PullTransformer<Object, Object>> constructor = - transformerClass.getConstructor(ExtensionPointRegistry.class); - transformer = constructor.newInstance(registry); - } - } catch (Exception e) { - throw new IllegalStateException(e); - } - } - return transformer; - } - - public String getSourceDataBinding() { - return source; - } - - public String getTargetDataBinding() { - return target; - } - - public int getWeight() { - return weight; - } - - public Object transform(Object source, TransformationContext context) { - return getTransformer().transform(source, context); - } - - @Override - public String toString() { - StringBuffer sb = new StringBuffer(super.toString()); - sb.append(";className=").append(transformerDeclaration.getClassName()); - return sb.toString(); - } - } - - /** - * A transformer facade allowing transformers to be lazily loaded - * and initialized. - */ - private class LazyPushTransformer implements PushTransformer<Object, Object> { - - private String source; - private String target; - private int weight; - private ServiceDeclaration transformerDeclaration; - private PushTransformer<Object, Object> transformer; - - public LazyPushTransformer(String source, String target, int weight, ServiceDeclaration transformerDeclaration) { - this.source = source; - this.target = target; - this.weight = weight; - this.transformerDeclaration = transformerDeclaration; - } - - /** - * Load and instantiate the transformer class. - * - * @return The transformer. - */ - @SuppressWarnings("unchecked") - private PushTransformer<Object, Object> getTransformer() { - if (transformer == null) { - try { - Class<PushTransformer<Object, Object>> transformerClass = - (Class<PushTransformer<Object, Object>>)transformerDeclaration.loadClass(); - try { - Constructor<PushTransformer<Object, Object>> constructor = transformerClass.getConstructor(); - transformer = constructor.newInstance(); - } catch (NoSuchMethodException e) { - Constructor<PushTransformer<Object, Object>> constructor = - transformerClass.getConstructor(ExtensionPointRegistry.class); - transformer = constructor.newInstance(registry); - } - } catch (Exception e) { - throw new IllegalStateException(e); - } - } - return transformer; - } - - public String getSourceDataBinding() { - return source; - } - - public String getTargetDataBinding() { - return target; - } - - public int getWeight() { - return weight; - } - - public void transform(Object source, Object sink, TransformationContext context) { - getTransformer().transform(source, sink, context); - } - - @Override - public String toString() { - StringBuffer sb = new StringBuffer(super.toString()); - sb.append(";className=").append(transformerDeclaration.getClassName()); - return sb.toString(); - } - } - - //FIXME The following methods should be on a different class from - // extension point - - public List<Transformer> getTransformerChain(String sourceType, String resultType) { - loadTransformers(); - - String source = sourceType; - String result = resultType; - List<Transformer> transformers = new ArrayList<Transformer>(); - // First check if there is a direct path, if yes, use it regardless of the weight - DirectedGraph<Object, Transformer>.Edge link = graph.getEdge(sourceType, resultType); - if (link != null) { - transformers.add(link.getValue()); - } else { - DirectedGraph<Object, Transformer>.Path path = graph.getShortestPath(source, result); - if (path == null) { - return null; - } - for (DirectedGraph<Object, Transformer>.Edge edge : path.getEdges()) { - transformers.add(edge.getValue()); - } - } - return transformers; - } - - @Override - public String toString() { - loadTransformers(); - - return graph.toString(); - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/Mediator.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/Mediator.java deleted file mode 100644 index 8184d739a8..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/Mediator.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * 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.databinding; - -import java.util.Map; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * This interface will be used as a Tuscany system service to perform data mediations - * - * Mediate the data from one type to the other one - * - * @version $Rev$ $Date$ - */ -public interface Mediator { - - /** - * Mediate the data from the source type to the target type - * @param source The data to be mediated - * @param sourceDataType Data type for the source data - * @param targetDataType Data type for the target data - * @param context - * @return - */ - Object mediate(Object source, DataType sourceDataType, DataType targetDataType, Map<String, Object> context); - - /** - * Mediate the source data into the target which is a sink to receive the data - * @param source The data to be mediated - * @param target The sink to receive data - * @param sourceDataType Data type for the source data - * @param targetDataType Data type for the target data - */ - void mediate(Object source, - Object target, - DataType sourceDataType, - DataType targetDataType, - Map<String, Object> context); - - /** - * Transform the input parameters for the source operation to the expected parameters for - * the target operation - * @param input The input data, typically an array of parameters - * @param sourceOperation The source operation - * @param targetOperation The target operation - * @param metadata Additional metadata - * @return The transformed input data for the target operation - */ - Object mediateInput(Object input, Operation sourceOperation, Operation targetOperation, Map<String, Object> metadata); - - /** - * Transform the return value for the target operation to the expected return value for - * the source operation - * @param output The output data, typically the return value - * @param sourceOperation The source operation - * @param targetOperation The target operation - * @param metadata Additional metadata - * @return The transformed output data for the source operation - */ - Object mediateOutput(Object output, - Operation sourceOperation, - Operation targetOperation, - Map<String, Object> metadata); - - /** - * Transform the fault data for the target operation to the expected fault data for - * the source operation - * @param fault The fault data, such as Java exception or fault message - * @param sourceOperation The source operation - * @param targetOperation The target operation - * @param metadata Additional metadata - * @return The transformed fault data for the source operation - */ - Object mediateFault(Object fault, Operation sourceOperation, Operation targetOperation, Map<String, Object> metadata); - - /** - * Copy the data - * @param data The orginal data - * @param dataType The data type - * @return The copy - */ - Object copy(Object data, DataType dataType); - - /** - * Copy an array of data objects passed to an operation - * @param data array of objects to copy - * @return the copy - */ - public Object copyInput(Object input, Operation operation); - - /** - * Copy the output data - * @param data The orginal output - * @param operation The operation - * @return The copy - */ - Object copyOutput(Object data, Operation operation); - - /** - * Copy the fault data - * @param fault The orginal fault data - * @param operation The operation - * @return The copy - */ - Object copyFault(Object fault, Operation operation); - - /** - * Get the DataBindings used by this mediator. - * @return - */ - DataBindingExtensionPoint getDataBindings(); - - /** - * Get the Transformers used by this mediator. - * @return - */ - TransformerExtensionPoint getTransformers(); - - /** - * Create an instance of TransformationContext - * @return - */ - TransformationContext createTransformationContext(); - - /** - * Create an instance of TransformationContext - * @param sourceDataType - * @param targetDataType - * @param metadata - * @return - */ - TransformationContext createTransformationContext(DataType sourceDataType, - DataType targetDataType, - Map<String, Object> metadata); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/PullTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/PullTransformer.java deleted file mode 100644 index 81264923eb..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/PullTransformer.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.databinding; - -/** - * PullTransformer transforms data from one binding format to the other one which can be directly consumed - * - * @param <S> The source data type - * @param <R> the target data type - * - * @version $Rev$ $Date$ - */ -public interface PullTransformer<S, R> extends Transformer { - /** - * Transform source data into the result type. - * - * @param source The source data - * @param context The context for the transformation - * @return The transformed result - */ - R transform(S source, TransformationContext context); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/PushTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/PushTransformer.java deleted file mode 100644 index 600a6477f6..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/PushTransformer.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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.databinding; - -/** - * A transformer that pushes data from its source into the sink - * - * @param <S> - * @param <R> - * - * @version $Rev$ $Date$ - */ -public interface PushTransformer<S, R> extends Transformer { - /** - * @param source The source data - * @param sink The sink to receive the data - * @param context - */ - void transform(S source, R sink, TransformationContext context); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/SimpleTypeMapper.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/SimpleTypeMapper.java deleted file mode 100644 index ece8027c29..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/SimpleTypeMapper.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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.databinding; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; - -/** - * Type Mapper between XML schema simple data types and java objects - * - * @version $Rev$ $Date$ - */ -public interface SimpleTypeMapper { - /** - * Parse the XML lexical representation into a java object - * @param simpleType The XSD simple type - * @param value the XML lexical representation - * @param context The context of the transformation - * @return A java object for the XML value - */ - Object toJavaObject(QName simpleType, String value, TransformationContext context); - /** - * Create the XML lexical representation for a java object - * @param simpleType The XSD simple type - * @param obj The java object - * @param context The context of the transformation - * @return The XML lexical representation - */ - String toXMLLiteral(QName simpleType, Object obj, TransformationContext context); - - /** - * Get the java type for a simple xml type - * @param xmlType - * @return - */ - Class<?> getJavaType(QName xmlType); - - /** - * Get the xml type for a java type - * @param javaType - * @return - */ - TypeInfo getXMLType(Class<?> javaType); - - /** - * Check if an xml type is a simple type - * @param xmlType - * @return - */ - boolean isSimpleXSDType(QName xmlType); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformationContext.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformationContext.java deleted file mode 100644 index 9ffadd1eae..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformationContext.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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.databinding; - -import java.util.Map; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * Context for data transformation - * - * @version $Rev$ $Date$ - */ -public interface TransformationContext { - - /** - * @return - */ - Operation getSourceOperation(); - - /** - * @param sourceOperation - */ - void setSourceOperation(Operation sourceOperation); - - /** - * @return - */ - Operation getTargetOperation(); - - /** - * @param targetOperation - */ - void setTargetOperation(Operation targetOperation); - - /** - * Get the source data type - * - * @return - */ - DataType getSourceDataType(); - - /** - * Get the target data type - * - * @return - */ - DataType getTargetDataType(); - - /** - * Set the source data type - * - * @param sourceDataType - */ - void setSourceDataType(DataType sourceDataType); - - /** - * Set the target data type - * - * @param targetDataType - */ - void setTargetDataType(DataType targetDataType); - - /** - * Get the ClassLoader - * - * @return Returns the ClassLoader - */ - ClassLoader getClassLoader(); - - /** - * Get a map of metadata - * - * @return Returns a map of the metadata - */ - Map<String, Object> getMetadata(); - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformationException.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformationException.java deleted file mode 100644 index 4f949f7dff..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformationException.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.databinding; - - -/** - * Reports problems during data transformation - * - * @version $Rev$ $Date$ - */ -public class TransformationException extends RuntimeException { - - private static final long serialVersionUID = 7662385613693006428L; - private String sourceDataBinding; - private String targetDataBinding; - - public TransformationException() { - super(); - } - - public TransformationException(String message, Throwable cause) { - super(message, cause); - } - - public TransformationException(String message) { - super(message); - } - - public TransformationException(Throwable cause) { - super(cause); - } - - public String getSourceDataBinding() { - return sourceDataBinding; - } - - public void setSourceDataBinding(String sourceDataBinding) { - this.sourceDataBinding = sourceDataBinding; - } - - public String getTargetDataBinding() { - return targetDataBinding; - } - - public void setTargetDataBinding(String targetDataBinding) { - this.targetDataBinding = targetDataBinding; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/Transformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/Transformer.java deleted file mode 100644 index 2aa0ad7c15..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/Transformer.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.databinding; - -/** - * A transformer provides the data transformation from source type to target type. The cost of the transformation is - * modelled as weight. - * - * @version $Rev$ $Date$ - */ -public interface Transformer { - /** - * Get the source type that this transformer transforms data from. The type is used as the key when the transformer - * is registered with TransformerRegistry. - * - * @return A key identifying the source type - */ - String getSourceDataBinding(); - - /** - * Get the target type that this transformer transforms data into. The type is used as the key when the transformer - * is registered with TransformerRegistry. - * - * @return A key identifying the target type - */ - String getTargetDataBinding(); - - /** - * Get the cost of the transformation. The weight can be used to choose the most efficient path if there are more - * than one available from the source to the target. - * - * @return An integer representing the cost of the transformation - */ - int getWeight(); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformerExtensionPoint.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformerExtensionPoint.java deleted file mode 100644 index ee7efe4860..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformerExtensionPoint.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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.databinding; - -import java.util.List; - -/** - * An extension point for data transformer extensions. - * - * @version $Rev$ $Date$ - */ -public interface TransformerExtensionPoint { - - /** - * Register a transformer - * - * @param sourceDataBinding - * @param targetDataBinding - * @param weight - * @param transformer - * @param publicTransformer TODO - */ - void addTransformer(String sourceDataBinding, - String targetDataBinding, - int weight, - Transformer transformer, - boolean publicTransformer); - - /** - * Register a transformer - * - * @param transformer - * @param publicTransformer TODO - */ - void addTransformer(Transformer transformer, boolean publicTransformer); - - /** - * Unregister a transformer - * - * @param sourceDataBinding - * @param targetDataBinding - * @return - */ - boolean removeTransformer(String sourceDataBinding, String targetDataBinding); - - /** - * Get the direct Transformer which can transform data from source type to - * result type - * - * @param sourceDataBinding - * @param targetDataBinding - * @return - */ - Transformer getTransformer(String sourceDataBinding, String targetDataBinding); - - /** - * Get the a chain of Transformers which can transform data from source type - * to result type - * - * @param sourceDataBinding - * @param targetDataBinding - * @return - */ - List<Transformer> getTransformerChain(String sourceDataBinding, String targetDataBinding); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java deleted file mode 100644 index ee4e35555c..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.databinding; - -import java.util.List; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * A contract for transformers to deal with wrapping/unwrapping for WSDL wrapper style operations - * - * @version $Rev$ $Date$ - */ -public interface WrapperHandler<T> { - /** - * Create a wrapper element - * @param operation The operation - * @param input Is it for input or output - * @return An object representing the wrapper element - */ - T create(Operation operation, boolean input); - - /** - * Get the data type for the wrapper - * @param operation The operation - * @param input Is it for input or output? - * @return The data type of the wrapper, null if it's not a wrapper type - */ - DataType getWrapperType(Operation operation, boolean input); - - /** - * Check if the given data is an instance of the wrapper - * @param wrapper - * @param operation The operation - * @param input Input or output - * @return - */ - boolean isInstance(Object wrapper, Operation operation, boolean input); - - /** - * Populate the wrapper element with the child objects - * @param wrapper The wrapper object - * @param childObjects The child objects - * @param operation The operation - * @param input Is it for input or output - */ - void setChildren(T wrapper, - Object[] childObjects, - Operation operation, - boolean input); - - /** - * Get a list of child elements from the wrapper - * @param wrapper The wrapper object - * @param operation The operation - * @param input Is it for input or output - * @return child elements under the wrapper - */ - List getChildren(T wrapper, Operation operation, boolean input); -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java deleted file mode 100644 index e940f8675f..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.databinding; - -import java.util.List; - -import org.apache.tuscany.sca.contribution.resolver.ModelResolver; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; -import org.apache.tuscany.sca.xsd.XSDFactory; -import org.apache.tuscany.sca.xsd.XSDefinition; - -/** - * XML and schema helper for Java types - */ -public interface XMLTypeHelper { - - // FIXME: This method seems to require the XMLHelper instance to be stateful - /** - * Convert a Java type into XML type information - * @param javaType the physical Java class - * @param logical the logical type information - * @return the XML type information - */ - TypeInfo getTypeInfo(Class javaType, Object logical); - - /** - * Get schema definitions for the Java types known to this helper - * @return A list of schema definitions - */ - // List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver); - - /** - * Get a list of XML schemas for the given data types - * @param factory - * @param resolver - * @param dataTypes - * @return - */ - List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List<DataType> dataTypes); - /** - * Get a list of XML schemas for the given interface - * @param factory - * @param resolver - * @param intf - * @return - */ - List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf); - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/annotation/DataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/annotation/DataBinding.java deleted file mode 100644 index 4405077e29..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/annotation/DataBinding.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.databinding.annotation; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -/** - * Used to demarcate the mapping style for an interface or operation - * - * @version $Rev$ $Date$ - */ -// FIXME: [rfeng] We should consider to use javax.jws.soap.SOAPBinding -@Target({TYPE, METHOD}) -@Retention(RUNTIME) -public @interface DataBinding { - - /** - * Indicate the effective databinding that controls the WSDL/Java mapping of the - * interface/operation - * - * @return the data binding with the MIME media type syntax - */ - String value(); - - /** - * Indicate if the operation is mapped using WRAPPED or BARE style. Originated from - * javax.jws.soap.SOAPBinding.ParameterStyle: Determines whether method parameters - * represent the entire message body, or whether the parameters are elements wrapped - * inside a top-level element named after the operation - * - * @return true if the parameter style is WRAPPED, false if BARE - */ - boolean wrapped() default false; - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/annotation/DataType.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/annotation/DataType.java deleted file mode 100644 index 650e909c61..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/annotation/DataType.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.databinding.annotation; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -/** - * Used to demarcate expected data types for parameters and return type - * - * @version $Rev$ $Date$ - */ -@Target( {METHOD, PARAMETER}) -@Retention(RUNTIME) -public @interface DataType { - - /** - * Returns the data binding configuration in MIME media type syntax - * @return the data binding - */ - String value(); - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java deleted file mode 100644 index 51ca792171..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/externalizable/ExternalizableDataBinding.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.databinding.externalizable; - -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; - -/** - * DataNinding for Externalizable objects. - * - * @version $Rev$ $Date$ - */ -public class ExternalizableDataBinding extends BaseDataBinding { - - public static final String NAME = java.io.Externalizable.class.getName(); - - public ExternalizableDataBinding() { - super(NAME, java.io.Externalizable.class); - } - - - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java deleted file mode 100644 index cb9f2969e2..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * 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.databinding.impl; - - -import org.apache.tuscany.sca.databinding.DataBinding; -import org.apache.tuscany.sca.databinding.WrapperHandler; -import org.apache.tuscany.sca.databinding.XMLTypeHelper; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Base Implementation of DataBinding - * - * @version $Rev$ $Date$ - */ -public abstract class BaseDataBinding implements DataBinding { - - private Class<?> baseType; - - private String name; - - /** - * Create a databinding with the base java type whose name will be used as - * the name of the databinding - * - * @param baseType The base java class or interface representing the - * databinding, for example, org.w3c.dom.Node - */ - protected BaseDataBinding(Class<?> baseType) { - this(baseType.getName(), baseType); - } - - /** - * Create a databinding with the name and base java type - * - * @param name The name of the databinding - * @param baseType The base java class or interface representing the - * databinding, for example, org.w3c.dom.Node - */ - protected BaseDataBinding(String name, Class<?> baseType) { - this.name = name; - this.baseType = baseType; - } - - @SuppressWarnings("unchecked") - public boolean introspect(DataType type, Operation operation) { - assert type != null; - Class cls = type.getPhysical(); - if (baseType != null && baseType.isAssignableFrom(cls)) { - type.setDataBinding(getName()); - if (type.getLogical() == null) { - type.setLogical(XMLType.UNKNOWN); - } - return true; - } - return false; - } - - public DataType introspect(Object value, Operation operation) { - if (value == null) { - return null; - } else { - DataType<Class> dataType = new DataTypeImpl<Class>(value.getClass(), value.getClass()); - if (introspect(dataType, (Operation) null)) { - return dataType; - } else { - return null; - } - } - } - - public final String getName() { - return name; - } - - /** - * @see org.apache.tuscany.sca.databinding.DataBinding#getWrapperHandler() - */ - public WrapperHandler getWrapperHandler() { - return null; - } - - public Object copy(Object object, DataType dataType, Operation operation) { - return object; - } - - public XMLTypeHelper getXMLTypeHelper() { - return null; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseTransformer.java deleted file mode 100644 index 94a2cdb0bb..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseTransformer.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.databinding.impl; - -import org.apache.tuscany.sca.databinding.Transformer; - -/** - * Base Implementation of Transformer which provides the registration to the - * transformer registry - * - * @version $Rev$ $Date$ - */ -public abstract class BaseTransformer<S, T> implements Transformer { - - protected BaseTransformer() { - super(); - } - - protected abstract Class<S> getSourceType(); - - protected abstract Class<T> getTargetType(); - - public String getSourceDataBinding() { - return getSourceType().getName(); - } - - public String getTargetDataBinding() { - return getTargetType().getName(); - } - - public int getWeight() { - // default to 50 - return 50; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java deleted file mode 100644 index 01916dfb96..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java +++ /dev/null @@ -1,452 +0,0 @@ -/* - * 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.databinding.impl; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Directed, weighted graph - * - * @param <V> The type of vertex object - * @param <E> The type of edge object - * - * @version $Rev$ $Date$ - */ -public class DirectedGraph<V, E> implements Cloneable { - private final Map<V, Vertex> vertices = new HashMap<V, Vertex>(); - - /** - * Key for the shortest path cache - */ - private final class VertexPair { - private Vertex source; - - private Vertex target; - - /** - * @param source - * @param target - */ - private VertexPair(Vertex source, Vertex target) { - super(); - this.source = source; - this.target = target; - } - - @Override - public boolean equals(Object object) { - if (!VertexPair.class.isInstance(object)) { - return false; - } - VertexPair pair = (VertexPair)object; - return source == pair.source && target == pair.target; - } - - @Override - public int hashCode() { - int x = source == null ? 0 : source.hashCode(); - int y = target == null ? 0 : target.hashCode(); - return x ^ y; - } - - } - - // Fix for TUSCANY-2069, making the map concurrent - private final Map<VertexPair, Path> paths = new ConcurrentHashMap<VertexPair, Path>(); - private final Path NULL_PATH = new Path(); - - /** - * Vertex of a graph - */ - public final class Vertex { - private V value; - - // TODO: Do we want to support multiple edges for a vertex pair? If so, - // we should use a List instead of Map - private Map<Vertex, Edge> outEdges = new HashMap<Vertex, Edge>(); - private Map<Vertex, Edge> inEdges = new HashMap<Vertex, Edge>(); - - private Vertex(V value) { - this.value = value; - } - - @Override - public String toString() { - return "(" + value + ")"; - } - - public V getValue() { - return value; - } - - public Map<Vertex, Edge> getOutEdges() { - return outEdges; - } - - public Map<Vertex, Edge> getInEdges() { - return inEdges; - } - - } - - /** - * An Edge connects two vertices in one direction - */ - public final class Edge { - private Vertex sourceVertex; - - private Vertex targetVertex; - - private E value; - - private int weight; - - private boolean pub = true; - - public Edge(Vertex source, Vertex target, E value, int weight, boolean pub) { - this.sourceVertex = source; - this.targetVertex = target; - this.value = value; - this.weight = weight; - this.pub = pub; - } - - @Override - public String toString() { - return sourceVertex + "->" + targetVertex + "[" + value + "," + weight + "]"; - } - - public E getValue() { - return value; - } - - public void setValue(E value) { - this.value = value; - } - - public Vertex getTargetVertex() { - return targetVertex; - } - - public void setTargetVertex(Vertex vertex) { - this.targetVertex = vertex; - } - - public int getWeight() { - return weight; - } - - public void setWeight(int weight) { - this.weight = weight; - } - - public Vertex getSourceVertex() { - return sourceVertex; - } - - public void setSourceVertex(Vertex sourceVertex) { - this.sourceVertex = sourceVertex; - } - - public boolean isPublic() { - return pub; - } - - public void setPublic(boolean pub) { - this.pub = pub; - } - } - - private final class Node implements Comparable<Node> { - - private long distance = Integer.MAX_VALUE; - - private Node previous; // NOPMD by rfeng on 9/26/06 9:17 PM - - private Vertex vertex; // NOPMD by rfeng on 9/26/06 9:17 PM - - private Node(Vertex vertex) { - this.vertex = vertex; - } - - public int compareTo(Node o) { - return (distance > o.distance) ? 1 : ((distance == o.distance) ? 0 : -1); - } - } - - public void addEdge(V source, V target, E edgeValue, int weight, boolean publicEdge) { - Vertex s = getVertex(source); - if (s == null) { - s = new Vertex(source); - vertices.put(source, s); - } - Vertex t = getVertex(target); - if (t == null) { - t = new Vertex(target); - vertices.put(target, t); - } - Edge edge = new Edge(s, t, edgeValue, weight, publicEdge); - s.outEdges.put(t, edge); - t.inEdges.put(s, edge); - } - - public void addEdge(V soure, V target) { - addEdge(soure, target, null, 0, true); - } - - public Vertex getVertex(V source) { - Vertex s = vertices.get(source); - return s; - } - - public boolean removeEdge(V source, V target) { - Vertex s = getVertex(source); - if (s == null) { - return false; - } - - Vertex t = getVertex(target); - if (t == null) { - return false; - } - - return s.outEdges.remove(t) != null && t.inEdges.remove(s) != null; - - } - - public void removeEdge(Edge edge) { - edge.sourceVertex.outEdges.remove(edge.targetVertex); - edge.targetVertex.inEdges.remove(edge.sourceVertex); - } - - public void removeVertex(Vertex vertex) { - vertices.remove(vertex.getValue()); - for (Edge e : new ArrayList<Edge>(vertex.outEdges.values())) { - removeEdge(e); - } - for (Edge e : new ArrayList<Edge>(vertex.inEdges.values())) { - removeEdge(e); - } - } - - public Edge getEdge(Vertex source, Vertex target) { - return source.outEdges.get(target); - } - - public Edge getEdge(V source, V target) { - Vertex sv = getVertex(source); - if (sv == null) { - return null; - } - Vertex tv = getVertex(target); - if (tv == null) { - return null; - } - return getEdge(getVertex(source), getVertex(target)); - } - - /** - * Get the shortest path from the source vertex to the target vertex using - * Dijkstra's algorithm. If there's no path, null will be returned. If the - * source is the same as the target, it returns a path with empty edges with - * weight 0. - * - * @param sourceValue The value identifies the source - * @param targetValue The value identifies the target - * @return The shortest path - */ - public Path getShortestPath(V sourceValue, V targetValue) { - Vertex source = getVertex(sourceValue); - if (source == null) { - return null; - } - Vertex target = getVertex(targetValue); - if (target == null) { - return null; - } - - VertexPair pair = new VertexPair(source, target); - Path path = null; - if (paths.containsKey(pair)) { - path = paths.get(pair); - return path == NULL_PATH? null: path; - } - - // Check if there is a direct link, if yes, use it instead - Edge direct = getEdge(source, target); - path = new Path(); - if (direct != null) { - path.addEdge(direct); - paths.put(pair, path); - return path; - } - - Map<Vertex, Node> nodes = new HashMap<Vertex, Node>(); - for (Vertex v : vertices.values()) { - Node node = new Node(v); - if (v == source) { - node.distance = 0; - } - nodes.put(v, node); - } - - Set<Node> otherNodes = new HashSet<Node>(nodes.values()); - Set<Node> nodesOnPath = new HashSet<Node>(); - Node nextNode = null; - while (!otherNodes.isEmpty()) { - nextNode = extractMin(otherNodes); - if (nextNode.vertex == target) { - path = getPath(nextNode); - paths.put(pair, path); // Cache it - return path == NULL_PATH? null: path; - } - nodesOnPath.add(nextNode); - for (Edge edge : nextNode.vertex.outEdges.values()) { - Node adjacentNode = nodes.get(edge.targetVertex); - // The private edge can only be used if the edge connects to the target directly - if (edge.isPublic() || edge.getTargetVertex() == target) { - if (nextNode.distance + edge.weight < adjacentNode.distance) { - adjacentNode.distance = nextNode.distance + edge.weight; - adjacentNode.previous = nextNode; - } - } - } - } - paths.put(pair, NULL_PATH); // Cache it - return null; - } - - /** - * Searches for the vertex u in the vertex set Q that has the least d[u] - * value. That vertex is removed from the set Q and returned to the user. - * - * @param nodes - * @return - */ - private Node extractMin(Set<Node> nodes) { - Node node = Collections.min(nodes); - nodes.remove(node); - return node; - } - - /** - * The path between two vertices - */ - public final class Path { - private List<Edge> edges = new LinkedList<Edge>(); - - private int weight; - - public int getWeight() { - return weight; - } - - public List<Edge> getEdges() { - return edges; - } - - public void addEdge(Edge edge) { - edges.add(0, edge); - weight += edge.weight; - } - - @Override - public String toString() { - return edges + ", " + weight; - } - } - - private Path getPath(Node t) { - if (t.distance == Integer.MAX_VALUE) { - return NULL_PATH; - } - Path path = new Path(); - Node u = t; - while (u.previous != null) { - Edge edge = getEdge(u.previous.vertex, u.vertex); - path.addEdge(edge); - u = u.previous; - } - return path; - } - - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - for (Vertex v : vertices.values()) { - sb.append(v.outEdges.values()).append("\n"); - } - return sb.toString(); - } - - public Map<V, Vertex> getVertices() { - return vertices; - } - - public void addGraph(DirectedGraph<V, E> otherGraph) { - for (Vertex v : otherGraph.vertices.values()) { - for (Edge e : v.outEdges.values()) { - addEdge(e.sourceVertex.value, e.targetVertex.value, e.value, e.weight, true); - } - } - } - - private Vertex getFirst() { - for (Vertex v : vertices.values()) { - if (v.inEdges.isEmpty()) { - return v; - } - } - if (!vertices.isEmpty()) { - throw new IllegalArgumentException("Circular ordering has been detected: " + toString()); - } else { - return null; - } - } - - public List<V> topologicalSort(boolean readOnly) { - DirectedGraph<V, E> graph = (!readOnly) ? this : (DirectedGraph<V, E>)clone(); - List<V> list = new ArrayList<V>(); - while (true) { - Vertex v = graph.getFirst(); - if (v == null) { - break; - } - list.add(v.getValue()); - graph.removeVertex(v); - } - - return list; - } - - @Override - public Object clone() { - DirectedGraph<V, E> copy = new DirectedGraph<V, E>(); - copy.addGraph(this); - return copy; - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Group2GroupTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Group2GroupTransformer.java deleted file mode 100644 index 95afd45380..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Group2GroupTransformer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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.databinding.impl; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.interfacedef.DataType; - -/** - * This is a special transformer to transform the output from one IDL to the - * other one - * - * @version $Rev$ $Date$ - */ -public class Group2GroupTransformer extends BaseTransformer<Object, Object> implements - PullTransformer<Object, Object> { - - protected Mediator mediator; - - /** - * @param wrapperHandler - */ - public Group2GroupTransformer(ExtensionPointRegistry registry) { - super(); - this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class); - } - - @Override - public String getSourceDataBinding() { - return GroupDataBinding.NAME; - } - - @Override - public String getTargetDataBinding() { - return GroupDataBinding.NAME; - } - - /** - * @see org.apache.tuscany.sca.databinding.impl.BaseTransformer#getSourceType() - */ - @Override - protected Class<Object> getSourceType() { - return Object.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.impl.BaseTransformer#getTargetType() - */ - @Override - protected Class<Object> getTargetType() { - return Object.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.Transformer#getWeight() - */ - @Override - public int getWeight() { - return 10; - } - - @SuppressWarnings("unchecked") - public Object transform(Object source, TransformationContext context) { - DataType<DataType> sourceType = context.getSourceDataType(); - DataType<DataType> targetType = context.getTargetDataType(); - - return mediator.mediate(source, sourceType.getLogical(), targetType.getLogical(), context.getMetadata()); - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java deleted file mode 100644 index 70efd6a5c5..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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.databinding.impl; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * The base class for a special databinding which represents a group of other databindings - * - * @version $Rev$ $Date$ - */ -public abstract class GroupDataBinding extends BaseDataBinding { - public static final String NAME = "databinding:group"; - - /** - * Marker type is a java class or interface representing the data format. - */ - protected Class[] markerTypes; - - public GroupDataBinding(Class[] types) { - super(NAME, GroupDataBinding.class); - this.markerTypes = types; - } - - @SuppressWarnings("unchecked") - @Override - public boolean introspect(DataType type, Operation operation) { - if (markerTypes == null) { - return false; - } - Type physical = type.getPhysical(); - if (physical instanceof ParameterizedType) { - physical = ((ParameterizedType)physical).getRawType(); - } - if (!(physical instanceof Class)) { - return false; - } - Class cls = (Class)physical; - for (Class<?> c : markerTypes) { - if (isTypeOf(c, cls)) { - type.setDataBinding(getDataBinding(c)); - Object logical = getLogical(cls, null); - if (logical != null) { - type.setLogical(getLogical(cls, null)); - } else { - type.setLogical(XMLType.UNKNOWN); - } - return true; - } - } - return false; - } - - /** - * Test if the given type is a subtype of the base type - * @param markerType - * @param type - * @return - */ - protected boolean isTypeOf(Class<?> markerType, Class<?> type) { - return markerType.isAssignableFrom(type); - } - - /** - * Derive the databinding name from a base class - * @param baseType - * @return - */ - protected String getDataBinding(Class<?> baseType) { - return baseType.getName(); - } - - /** - * Get the logical type - * @param type The java type - * @param operation TODO - * @return - */ - protected abstract Object getLogical(Class<?> type, Operation operation); - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java deleted file mode 100644 index 45896ca6a1..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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.databinding.impl; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.SimpleTypeMapper; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from a simple java object to a databinding's representation - * - * @version $Rev$ $Date$ - */ -public abstract class Java2SimpleTypeTransformer<T> extends BaseTransformer<Object, T> implements - PullTransformer<Object, T> { - - protected SimpleTypeMapper mapper; - - public Java2SimpleTypeTransformer() { - this.mapper = new SimpleTypeMapperImpl(); - } - - public Java2SimpleTypeTransformer(SimpleTypeMapper mapper) { - this.mapper = (mapper != null) ? mapper : new SimpleTypeMapperImpl(); - } - - public T transform(Object source, TransformationContext context) { - XMLType xmlType = (XMLType) context.getTargetDataType().getLogical(); - String text = mapper.toXMLLiteral(xmlType.getTypeName(), source, context); - return createElement(xmlType.getElementName(), text, context); - } - - @Override - public Class<Object> getSourceType() { - return Object.class; - } - - @Override - public int getWeight() { - return 10000; - } - - protected abstract T createElement(QName element, String literal, TransformationContext context); - - @Override - public String getSourceDataBinding() { - return SimpleJavaDataBinding.NAME; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java deleted file mode 100644 index 195c04e9c2..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java +++ /dev/null @@ -1,581 +0,0 @@ -/* - * 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.databinding.impl; - -import static org.apache.tuscany.sca.databinding.DataBinding.IDL_FAULT; -import static org.apache.tuscany.sca.databinding.DataBinding.IDL_OUTPUT; - -import java.io.Serializable; -import java.lang.reflect.Array; -import java.lang.reflect.InvocationTargetException; -import java.net.URI; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.HashMap; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.DataBinding; -import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint; -import org.apache.tuscany.sca.databinding.DataPipe; -import org.apache.tuscany.sca.databinding.DataPipeTransformer; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.Transformer; -import org.apache.tuscany.sca.databinding.TransformerExtensionPoint; -import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.FaultExceptionMapper; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.FaultException; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.oasisopen.sca.ServiceRuntimeException; - - -/** - * Default Mediator implementation - * - * @version $Rev$ $Date$ - */ -public class MediatorImpl implements Mediator { - private static final String TARGET_OPERATION = "target.operation"; - private static final String SOURCE_OPERATION = "source.operation"; - private ExtensionPointRegistry registry; - private DataBindingExtensionPoint dataBindings; - private TransformerExtensionPoint transformers; - private FaultExceptionMapper faultExceptionMapper; - - MediatorImpl(DataBindingExtensionPoint dataBindings, TransformerExtensionPoint transformers) { - this.dataBindings = dataBindings; - this.transformers = transformers; - } - - public MediatorImpl(ExtensionPointRegistry registry) { - this.registry = registry; - this.dataBindings = registry.getExtensionPoint(DataBindingExtensionPoint.class); - this.transformers = registry.getExtensionPoint(TransformerExtensionPoint.class); - this.faultExceptionMapper = - registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(FaultExceptionMapper.class); - - } - - @SuppressWarnings("unchecked") - public Object mediate(Object source, DataType sourceDataType, DataType targetDataType, Map<String, Object> metadata) { - if (sourceDataType == null || sourceDataType.getDataBinding() == null) { - if (source != null) { - Operation operation = (Operation)metadata.get(SOURCE_OPERATION); - sourceDataType = dataBindings.introspectType(source, operation); - } - } - if (sourceDataType == null || targetDataType == null) { - return source; - } else if (sourceDataType.equals(targetDataType)) { - return source; - } - - List<Transformer> path = getTransformerChain(sourceDataType, targetDataType); - - Object result = source; - int size = path.size(); - int i = 0; - while (i < size) { - Transformer transformer = path.get(i); - TransformationContext context = - createTransformationContext(sourceDataType, targetDataType, size, i, transformer, metadata); - // the source and target type - if (transformer instanceof PullTransformer) { - // For intermediate node, set data type to null - result = ((PullTransformer)transformer).transform(result, context); - } else if (transformer instanceof PushTransformer) { - DataPipeTransformer dataPipeFactory = (i < size - 1) ? (DataPipeTransformer)path.get(++i) : null; - DataPipe dataPipe = dataPipeFactory == null ? null : dataPipeFactory.newInstance(); - ((PushTransformer)transformer).transform(result, dataPipe.getSink(), context); - result = dataPipe.getResult(); - } - i++; - } - - return result; - } - - private TransformationContext createTransformationContext(DataType sourceDataType, - DataType targetDataType, - int size, - int index, - Transformer transformer, - Map<String, Object> metadata) { - DataType sourceType = - (index == 0) ? sourceDataType : new DataTypeImpl<Object>(transformer.getSourceDataBinding(), Object.class, - sourceDataType.getLogical()); - DataType targetType = - (index == size - 1) ? targetDataType : new DataTypeImpl<Object>(transformer.getTargetDataBinding(), - Object.class, targetDataType.getLogical()); - - //FIXME The ClassLoader should be passed in - // Allow privileged access to get ClassLoader. Requires RuntimePermission in security - // policy. - ClassLoader classLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { - public ClassLoader run() { - return Thread.currentThread().getContextClassLoader(); - } - }); - - Map<String, Object> copy = new HashMap<String, Object>(); - if (metadata != null) { - copy.putAll(metadata); - } - copy.put(ExtensionPointRegistry.class.getName(), registry); - - TransformationContext context = new TransformationContextImpl(sourceType, targetType, classLoader, copy); - return context; - } - - @SuppressWarnings("unchecked") - public void mediate(Object source, - Object target, - DataType sourceDataType, - DataType targetDataType, - Map<String, Object> metadata) { - if (source == null) { - // Shortcut for null value - return; - } - if (sourceDataType == null || sourceDataType.getDataBinding() == null) { - Operation operation = (Operation)metadata.get(SOURCE_OPERATION); - sourceDataType = dataBindings.introspectType(source, operation); - } - if (sourceDataType == null) { - return; - } else if (sourceDataType.equals(targetDataType)) { - return; - } - - List<Transformer> path = getTransformerChain(sourceDataType, targetDataType); - Object result = source; - int size = path.size(); - for (int i = 0; i < size; i++) { - Transformer transformer = path.get(i); - TransformationContext context = - createTransformationContext(sourceDataType, targetDataType, size, i, transformer, metadata); - - if (transformer instanceof PullTransformer) { - result = ((PullTransformer)transformer).transform(result, context); - } else if (transformer instanceof PushTransformer) { - DataPipeTransformer dataPipeFactory = (i < size - 1) ? (DataPipeTransformer)path.get(++i) : null; - DataPipe dataPipe = dataPipeFactory == null ? null : dataPipeFactory.newInstance(); - Object sink = dataPipe != null ? dataPipe.getSink() : target; - ((PushTransformer)transformer).transform(result, sink, context); - result = (dataPipe != null) ? dataPipe.getResult() : null; - } - } - } - - private List<Transformer> getTransformerChain(DataType sourceDataType, DataType targetDataType) { - String sourceId = sourceDataType.getDataBinding(); - String targetId = targetDataType.getDataBinding(); - List<Transformer> path = transformers.getTransformerChain(sourceId, targetId); - if (path == null) { - TransformationException ex = - new TransformationException("No path found for the transformation: " + sourceId + "->" + targetId); - ex.setSourceDataBinding(sourceId); - ex.setTargetDataBinding(targetId); - throw ex; - } - return path; - } - - public DataBindingExtensionPoint getDataBindings() { - return dataBindings; - } - - public TransformerExtensionPoint getTransformers() { - return transformers; - } - - private DataType getFaultType(DataType exceptionType) { - return exceptionType == null ? null : (DataType)exceptionType.getLogical(); - } - - /** - * @param qn1 - * @param qn2 - */ - private boolean matches(QName qn1, QName qn2) { - if (qn1 == qn2) { - return true; - } - if (qn1 == null || qn2 == null) { - return false; - } - String ns1 = qn1.getNamespaceURI(); - String ns2 = qn2.getNamespaceURI(); - String e1 = qn1.getLocalPart(); - String e2 = qn2.getLocalPart(); - if (e1.equals(e2) && (ns1.equals(ns2) || ns1.equals(ns2 + "/") || ns2.equals(ns1 + "/"))) { - // Tolerating the trailing / which is required by JAX-WS java package --> xml ns mapping - return true; - } - return false; - } - - /** - * @param source The source exception - * @param sourceExType The data type for the source exception - * @param targetExType The data type for the target exception - * @param sourceType The fault type for the source - * @param targetType The fault type for the target - * @return - */ - private Object transformException(Object source, - DataType sourceExType, - DataType targetExType, - DataType sourceType, - DataType targetType, - Map<String, Object> metadata) { - - if (sourceType == targetType || (sourceType != null && sourceType.equals(targetType))) { - return source; - } - - DataType<DataType> eSourceDataType = - new DataTypeImpl<DataType>(IDL_FAULT, sourceExType.getPhysical(), sourceType); - DataType<DataType> eTargetDataType = - new DataTypeImpl<DataType>(IDL_FAULT, targetExType.getPhysical(), targetType); - - return mediate(source, eSourceDataType, eTargetDataType, metadata); - } - - // - // Assumes we're going from target->source, knowing that we're throwing BACK an exception, rather than the more - // obvious source->target - // - public Object mediateFault(Object result, - Operation sourceOperation, - Operation targetOperation, - Map<String, Object> metadata) { - - // FIXME: How to match fault data to a fault type for the - // operation? - - // If the result is from an InvocationTargetException look at - // the actual cause. - if (result instanceof InvocationTargetException) { - result = ((InvocationTargetException)result).getCause(); - } - DataType targetDataType = null; - for (DataType exType : targetOperation.getFaultTypes()) { - if (((Class)exType.getPhysical()).isInstance(result)) { - if (result instanceof FaultException) { - DataType faultType = (DataType)exType.getLogical(); - if (((FaultException)result).isMatchingType(faultType.getLogical())) { - targetDataType = exType; - break; - } - } else { - targetDataType = exType; - break; - } - } - } - - /* - if (targetDataType == null) { - // Not a business exception - return resultMsg; - } - */ - - DataType targetFaultType = getFaultType(targetDataType); - if (targetFaultType == null) { - // No matching fault type, it's a system exception - Throwable cause = (Throwable)result; - throw new ServiceRuntimeException(cause); - } - - // FIXME: How to match a source fault type to a target fault - // type? - DataType sourceDataType = null; - DataType sourceFaultType = null; - for (DataType exType : sourceOperation.getFaultTypes()) { - DataType faultType = getFaultType(exType); - // Match by the QName (XSD element) of the fault type - if (faultType != null && typesMatch(targetFaultType.getLogical(), faultType.getLogical())) { - sourceDataType = exType; - sourceFaultType = faultType; - break; - } - } - - if (sourceFaultType == null) { - // No matching fault type, it's a system exception - Throwable cause = (Throwable)result; - throw new ServiceRuntimeException(cause); - } - - Map<String, Object> context = new HashMap<String, Object>(); - if (metadata != null) { - context.putAll(metadata); - } - if (targetOperation != null) { - context.put(SOURCE_OPERATION, targetOperation); - } - if (sourceOperation != null) { - context.put(TARGET_OPERATION, sourceOperation); - } - - Object newResult = - transformException(result, targetDataType, sourceDataType, targetFaultType, sourceFaultType, context); - - return newResult; - - } - - private boolean typesMatch(Object first, Object second) { - if (first.equals(second)) { - return true; - } - if (first instanceof XMLType && second instanceof XMLType) { - XMLType t1 = (XMLType)first; - XMLType t2 = (XMLType)second; - // TUSCANY-2113, we should compare element names only - return matches(t1.getElementName(), t2.getElementName()); - } - return false; - } - - /** - * Assumes we're going from target-to-source, knowing that we're sending BACK an output response, rather than the more - * obvious source-to-target. - * - * @param output - * @param sourceOperation - * @param targetOperation - * @return - */ - public Object mediateOutput(Object output, - Operation sourceOperation, - Operation targetOperation, - Map<String, Object> metadata) { - // Create a data type to represent the ouput produced by the target operation - DataType<DataType> targetType = - new DataTypeImpl<DataType>(IDL_OUTPUT, Object.class, targetOperation.getOutputType()); - - // Create a data type to represent the ouput expected by the source operation - DataType<DataType> sourceType = - new DataTypeImpl<DataType>(IDL_OUTPUT, Object.class, sourceOperation.getOutputType()); - - if (sourceType == targetType || (sourceType != null && sourceType.equals(targetType))) { - return output; - } - Map<String, Object> context = new HashMap<String, Object>(); - if (metadata != null) { - context.putAll(metadata); - } - if (targetOperation != null) { - context.put(SOURCE_OPERATION, targetOperation); - } - if (sourceOperation != null) { - context.put(TARGET_OPERATION, sourceOperation); - } - return mediate(output, targetType, sourceType, context); - } - - public Object mediateInput(Object input, - Operation sourceOperation, - Operation targetOperation, - Map<String, Object> metadata) { - // Get the data type to represent the input passed in by the source operation - DataType sourceType = sourceOperation.getInputType(); - - // Get the data type to represent the input expected by the target operation - DataType targetType = targetOperation.getInputType(); - - if (sourceType == targetType || (sourceType != null && sourceType.equals(targetType))) { - return input; - } - Map<String, Object> context = new HashMap<String, Object>(); - if (metadata != null) { - context.putAll(metadata); - } - if (sourceOperation != null) { - context.put(SOURCE_OPERATION, sourceOperation); - } - if (targetOperation != null) { - context.put(TARGET_OPERATION, targetOperation); - } - return mediate(input, sourceType, targetType, context); - } - - public TransformationContext createTransformationContext() { - return new TransformationContextImpl(); - } - - public TransformationContext createTransformationContext(DataType sourceDataType, - DataType targetDataType, - Map<String, Object> metadata) { - return new TransformationContextImpl(sourceDataType, targetDataType, metadata); - } - - public Object copy(Object data, DataType dataType) { - return copy(data, dataType, null); - } - - /** - * Copy data using the specified databinding. - * @param data input data - * @param dataType - * @return a copy of the data - */ - private Object copy(Object data, DataType dataType, Operation operation) { - if (data == null) { - return null; - } - Class<?> clazz = data.getClass(); - if (String.class == clazz || clazz.isPrimitive() - || Number.class.isAssignableFrom(clazz) - || Boolean.class.isAssignableFrom(clazz) - || Character.class.isAssignableFrom(clazz) - || Byte.class.isAssignableFrom(clazz) - || URI.class == clazz - || UUID.class == clazz - || QName.class == clazz) { - // Immutable classes - return data; - } - - DataBinding javaBeansDataBinding = dataBindings.getDataBinding(JavaBeansDataBinding.NAME); - // FIXME: The JAXB databinding is hard-coded here - DataBinding jaxbDataBinding = dataBindings.getDataBinding("javax.xml.bind.JAXBElement"); - DataBinding dataBinding = dataBindings.getDataBinding(dataType.getDataBinding()); - // If no databinding was specified, introspect the given arg to - // determine its databinding - if (dataBinding == null) { - if (!"java:array".equals(dataType.getDataBinding())) { - dataType = dataBindings.introspectType(data, operation); - if (dataType != null) { - String db = dataType.getDataBinding(); - dataBinding = dataBindings.getDataBinding(db); - if (dataBinding == null && db != null) { - return data; - } - } - } - if (dataBinding == null) { - - // Default to the JavaBean databinding - dataBinding = dataBindings.getDataBinding(JavaBeansDataBinding.NAME); - } - } - - // Use the JAXB databinding to copy non-Serializable data - if (dataBinding == javaBeansDataBinding) { - - // If the input data is an array containing non Serializable elements - // use JAXB - clazz = data.getClass(); - if (clazz.isArray()) { - if (Array.getLength(data) != 0) { - Object element = Array.get(data, 0); - if (element != null && !(element instanceof Serializable)) { - dataBinding = jaxbDataBinding; - } - } - } else { - - // If the input data is not Serializable use JAXB - if (!((data instanceof Serializable) || (data instanceof Cloneable))) { - dataBinding = jaxbDataBinding; - } - } - } - - if (dataBinding != null) { - return dataBinding.copy(data, dataType, operation); - } else { - return data; - } - } - - /** - * Copy an array of data objects passed to an operation - * @param data array of objects to copy - * @return the copy - */ - public Object copyInput(Object input, Operation operation) { - if (input == null) { - return null; - } - Object[] data = (input instanceof Object[]) ? (Object[])input : new Object[] {input}; - List<DataType> inputTypes = operation.getInputType().getLogical(); - Object[] copy = new Object[data.length]; - Map<Object, Object> map = new IdentityHashMap<Object, Object>(); - for (int i = 0, size = inputTypes.size(); i < size; i++) { - Object arg = data[i]; - if (arg == null) { - copy[i] = null; - } else { - Object copiedArg = map.get(arg); - if (copiedArg != null) { - copy[i] = copiedArg; - } else { - copiedArg = copy(arg, inputTypes.get(i)); - map.put(arg, copiedArg); - copy[i] = copiedArg; - } - } - } - return copy; - } - - public Object copyOutput(Object data, Operation operation) { - return copy(data, operation.getOutputType(), operation); - } - - public Object copyFault(Object fault, Operation operation) { - if (faultExceptionMapper == null) { - return fault; - } - for (DataType et : operation.getFaultTypes()) { - if (et.getPhysical().isInstance(fault)) { - Throwable ex = (Throwable)fault; - DataType<DataType> exType = - new DataTypeImpl<DataType>(ex.getClass(), new DataTypeImpl<XMLType>(ex.getClass(), XMLType.UNKNOWN)); - faultExceptionMapper.introspectFaultDataType(exType, operation, false); - DataType faultType = exType.getLogical(); - Object faultInfo = faultExceptionMapper.getFaultInfo(ex, faultType.getPhysical(), operation); - faultInfo = copy(faultInfo, faultType); - fault = - faultExceptionMapper.wrapFaultInfo(exType, ex.getMessage(), faultInfo, ex.getCause(), operation); - return fault; - } - } - return fault; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/PipedTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/PipedTransformer.java deleted file mode 100644 index a1a89005b3..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/PipedTransformer.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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.databinding.impl; - -import org.apache.tuscany.sca.databinding.DataPipe; -import org.apache.tuscany.sca.databinding.DataPipeTransformer; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; - -/** - * A utility class to connect PushTransformer and DataPipe to create a - * PullTransformer - * - * @param <S> Source type - * @param <I> Intermediate type - * @param <R> Result type - * - * @version $Rev$ $Date$ - */ -public class PipedTransformer<S, I, R> implements PullTransformer<S, R> { - private PushTransformer<S, I> pusher; - - private DataPipeTransformer<I, R> pipe; - - /** - * @param pumper - * @param pipe - */ - public PipedTransformer(PushTransformer<S, I> pumper, DataPipeTransformer<I, R> pipe) { - super(); - this.pusher = pumper; - this.pipe = pipe; - } - - public R transform(S source, TransformationContext context) { - DataPipe<I, R> dataPipe = pipe.newInstance(); - pusher.transform(source, dataPipe.getSink(), context); - return dataPipe.getResult(); - } - - public String getSourceDataBinding() { - return pusher.getSourceDataBinding(); - } - - public String getTargetDataBinding() { - return pipe.getTargetDataBinding(); - } - - public int getWeight() { - return pusher.getWeight() + pipe.getWeight(); - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java deleted file mode 100644 index c91176fc2c..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.databinding.impl; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.SimpleTypeMapper; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from a databinding's representation of simple - * types to Java Objects - * - * @version $Rev$ $Date$ - */ -public abstract class SimpleType2JavaTransformer<T> extends BaseTransformer<T, Object> implements - PullTransformer<T, Object> { - - protected SimpleTypeMapper mapper; - - public SimpleType2JavaTransformer() { - this.mapper = new SimpleTypeMapperImpl(); - } - - public SimpleType2JavaTransformer(SimpleTypeMapper mapper) { - this.mapper = (mapper != null) ? mapper : new SimpleTypeMapperImpl(); - } - - public Object transform(T source, TransformationContext context) { - XMLType xmlType = (XMLType)context.getSourceDataType().getLogical(); - QName type = (xmlType != null) ? xmlType.getTypeName() : null; - if (type == null) { - xmlType = (XMLType)context.getTargetDataType().getLogical(); - type = (xmlType != null) ? xmlType.getTypeName() : null; - } - Object result = mapper.toJavaObject(type, getText(source), context); - close(source); - return result; - } - - @Override - protected Class<Object> getTargetType() { - return Object.class; - } - - @Override - public int getWeight() { - // Cannot be used for intermediate - return 10000; - } - - /** - * Get the string value from the source - * @param source - * @return A string - */ - protected abstract String getText(T source); - - /** - * To be overrided by the subclass - * @param source - */ - protected void close(T source) { - } - - @Override - public String getTargetDataBinding() { - return SimpleJavaDataBinding.NAME; - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java deleted file mode 100644 index 9ffa950f1a..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java +++ /dev/null @@ -1,401 +0,0 @@ -/* - * 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.databinding.impl; - -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.Map; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; -import javax.xml.namespace.NamespaceContext; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.SimpleTypeMapper; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; - -/** - * Simple type mapper that maps from XSD types to Java Classes and Java Classes to XSD types. - * - * @version $Rev$ $Date$ - */ -public class SimpleTypeMapperImpl extends XSDDataTypeConverter implements SimpleTypeMapper { - - public static final Map<Class, String> JAVA2XML = new HashMap<Class, String>(); - - public static final String URI_2001_SCHEMA_XSD = "http://www.w3.org/2001/XMLSchema"; - - public static final Map<String, Class> XML2JAVA = new HashMap<String, Class>(); - - public static final QName XSD_ANY = new QName(URI_2001_SCHEMA_XSD, "any"); - - public static final QName XSD_ANYSIMPLETYPE = new QName(URI_2001_SCHEMA_XSD, "anySimpleType"); - - public static final QName XSD_ANYTYPE = new QName(URI_2001_SCHEMA_XSD, "anyType"); - - public static final QName XSD_ANYURI = new QName(URI_2001_SCHEMA_XSD, "anyURI"); - - public static final QName XSD_BASE64 = new QName(URI_2001_SCHEMA_XSD, "base64Binary"); - - public static final QName XSD_BOOLEAN = new QName(URI_2001_SCHEMA_XSD, "boolean"); - - public static final QName XSD_BYTE = new QName(URI_2001_SCHEMA_XSD, "byte"); - - public static final QName XSD_DATE = new QName(URI_2001_SCHEMA_XSD, "date"); - - public static final QName XSD_DATETIME = new QName(URI_2001_SCHEMA_XSD, "dateTime"); - - public static final QName XSD_DAY = new QName(URI_2001_SCHEMA_XSD, "gDay"); - - public static final QName XSD_DECIMAL = new QName(URI_2001_SCHEMA_XSD, "decimal"); - - public static final QName XSD_DOUBLE = new QName(URI_2001_SCHEMA_XSD, "double"); - - public static final QName XSD_DURATION = new QName(URI_2001_SCHEMA_XSD, "duration"); - - public static final QName XSD_ENTITIES = new QName(URI_2001_SCHEMA_XSD, "ENTITIES"); - - public static final QName XSD_ENTITY = new QName(URI_2001_SCHEMA_XSD, "ENTITY"); - - public static final QName XSD_FLOAT = new QName(URI_2001_SCHEMA_XSD, "float"); - - public static final QName XSD_HEXBIN = new QName(URI_2001_SCHEMA_XSD, "hexBinary"); - - public static final QName XSD_IDREF = new QName(URI_2001_SCHEMA_XSD, "IDREF"); - - public static final QName XSD_IDREFS = new QName(URI_2001_SCHEMA_XSD, "IDREFS"); - - public static final QName XSD_INT = new QName(URI_2001_SCHEMA_XSD, "int"); - - public static final QName XSD_INTEGER = new QName(URI_2001_SCHEMA_XSD, "integer"); - - public static final QName XSD_LONG = new QName(URI_2001_SCHEMA_XSD, "long"); - - public static final QName XSD_MONTH = new QName(URI_2001_SCHEMA_XSD, "gMonth"); - - public static final QName XSD_MONTHDAY = new QName(URI_2001_SCHEMA_XSD, "gMonthDay"); - - public static final QName XSD_NAME = new QName(URI_2001_SCHEMA_XSD, "Name"); - - public static final QName XSD_NCNAME = new QName(URI_2001_SCHEMA_XSD, "NCName"); - - public static final QName XSD_NEGATIVEINTEGER = new QName(URI_2001_SCHEMA_XSD, "negativeInteger"); - - public static final QName XSD_NMTOKEN = new QName(URI_2001_SCHEMA_XSD, "NMTOKEN"); - - public static final QName XSD_NMTOKENS = new QName(URI_2001_SCHEMA_XSD, "NMTOKENS"); - - public static final QName XSD_NONNEGATIVEINTEGER = new QName(URI_2001_SCHEMA_XSD, "nonNegativeInteger"); - - public static final QName XSD_NONPOSITIVEINTEGER = new QName(URI_2001_SCHEMA_XSD, "nonPositiveInteger"); - - public static final QName XSD_NORMALIZEDSTRING = new QName(URI_2001_SCHEMA_XSD, "normalizedString"); - - public static final QName XSD_NOTATION = new QName(URI_2001_SCHEMA_XSD, "NOTATION"); - - public static final QName XSD_POSITIVEINTEGER = new QName(URI_2001_SCHEMA_XSD, "positiveInteger"); - - public static final QName XSD_QNAME = new QName(URI_2001_SCHEMA_XSD, "QName"); - - public static final QName XSD_SHORT = new QName(URI_2001_SCHEMA_XSD, "short"); - - public static final Map<String, TypeInfo> XSD_SIMPLE_TYPES = new HashMap<String, TypeInfo>(); - - public static final QName XSD_STRING = new QName(URI_2001_SCHEMA_XSD, "string"); - - public static final QName XSD_TIME = new QName(URI_2001_SCHEMA_XSD, "time"); - - public static final QName XSD_TOKEN = new QName(URI_2001_SCHEMA_XSD, "token"); - - public static final QName XSD_UNSIGNEDBYTE = new QName(URI_2001_SCHEMA_XSD, "unsignedByte"); - - public static final QName XSD_UNSIGNEDINT = new QName(URI_2001_SCHEMA_XSD, "unsignedInt"); - - public static final QName XSD_UNSIGNEDLONG = new QName(URI_2001_SCHEMA_XSD, "unsignedLong"); - - public static final QName XSD_UNSIGNEDSHORT = new QName(URI_2001_SCHEMA_XSD, "unsignedShort"); - - public static final QName XSD_YEAR = new QName(URI_2001_SCHEMA_XSD, "gYear"); - - public static final QName XSD_YEARMONTH = new QName(URI_2001_SCHEMA_XSD, "gYearMonth"); - - private static final String[] XSD_TYPE_NAMES = - {"string", "boolean", "double", "float", "int", "integer", "long", "short", "byte", "decimal", "base64Binary", - "hexBinary", "anySimpleType", "anyType", "any", "QName", "dateTime", "date", "time", "normalizedString", - "token", "unsignedLong", "unsignedInt", "unsignedShort", "unsignedByte", "positiveInteger", "negativeInteger", - "nonNegativeInteger", "nonPositiveInteger", "gYearMonth", "gMonthDay", "gYear", "gMonth", "gDay", "duration", - "Name", "NCName", "NMTOKEN", "NMTOKENS", "NOTATION", "ENTITY", "ENTITIES", "IDREF", "IDREFS", "anyURI", - "language", "ID"}; - - static { - for (String type : XSD_TYPE_NAMES) { - TypeInfo simpleType = new TypeInfo(new QName(URI_2001_SCHEMA_XSD, type), true, null); - XSD_SIMPLE_TYPES.put(type, simpleType); - } - } - - static { - JAVA2XML.put(boolean.class, "boolean"); - JAVA2XML.put(byte.class, "byte"); - JAVA2XML.put(short.class, "short"); - JAVA2XML.put(int.class, "int"); - JAVA2XML.put(long.class, "long"); - JAVA2XML.put(float.class, "float"); - JAVA2XML.put(double.class, "double"); - JAVA2XML.put(Boolean.class, "boolean"); - JAVA2XML.put(Byte.class, "byte"); - JAVA2XML.put(Short.class, "short"); - JAVA2XML.put(Integer.class, "int"); - JAVA2XML.put(Long.class, "long"); - JAVA2XML.put(Float.class, "float"); - JAVA2XML.put(Double.class, "double"); - JAVA2XML.put(java.lang.String.class, "string"); - JAVA2XML.put(java.math.BigInteger.class, "integer"); - JAVA2XML.put(java.math.BigDecimal.class, "decimal"); - JAVA2XML.put(java.util.Calendar.class, "dateTime"); - JAVA2XML.put(java.util.Date.class, "dateTime"); - JAVA2XML.put(javax.xml.namespace.QName.class, "QName"); - JAVA2XML.put(java.net.URI.class, "string"); - JAVA2XML.put(javax.xml.datatype.XMLGregorianCalendar.class, "anySimpleType"); - JAVA2XML.put(javax.xml.datatype.Duration.class, "duration"); - JAVA2XML.put(java.lang.Object.class, "anyType"); - JAVA2XML.put(java.awt.Image.class, "base64Binary"); - JAVA2XML.put(byte[].class, "base64Binary"); - // java2XSD.put(javax.activation.DataHandler.class, "base64Binary"); - JAVA2XML.put(javax.xml.transform.Source.class, "base64Binary"); - JAVA2XML.put(java.util.UUID.class, "string"); - } - - static { - XML2JAVA.put("string", java.lang.String.class); - XML2JAVA.put("integer", java.math.BigInteger.class); - XML2JAVA.put("int", int.class); - XML2JAVA.put("long", long.class); - XML2JAVA.put("short", short.class); - XML2JAVA.put("decimal", java.math.BigDecimal.class); - XML2JAVA.put("float", float.class); - XML2JAVA.put("double", double.class); - XML2JAVA.put("boolean", boolean.class); - XML2JAVA.put("byte", byte.class); - XML2JAVA.put("QName", javax.xml.namespace.QName.class); - XML2JAVA.put("dateTime", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("base64Binary", byte[].class); - XML2JAVA.put("hexBinary", byte[].class); - XML2JAVA.put("unsignedInt", long.class); - XML2JAVA.put("unsignedShort", int.class); - XML2JAVA.put("unsignedByte", short.class); - XML2JAVA.put("time", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("date", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("gDay", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("gMonth", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("gYear", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("gYearMonth", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("gMonthDay", javax.xml.datatype.XMLGregorianCalendar.class); - XML2JAVA.put("anySimpleType", java.lang.Object.class); // For elements - // XML2JAVA.put("anySimpleType", java.lang.String.class); // For - // attributes - XML2JAVA.put("duration", javax.xml.datatype.Duration.class); - XML2JAVA.put("NOTATION", javax.xml.namespace.QName.class); - } - - private DatatypeFactory factory; - - public SimpleTypeMapperImpl() { - super(); - try { - this.factory = DatatypeFactory.newInstance(); - } catch (DatatypeConfigurationException e) { - throw new IllegalArgumentException(e); - } - } - - public Class<?> getJavaType(QName xmlType) { - if (xmlType != null && URI_2001_SCHEMA_XSD.equals(xmlType.getNamespaceURI())) { - return XML2JAVA.get(xmlType.getLocalPart()); - } else { - return null; - } - } - - public TypeInfo getXMLType(Class javaType) { - return XSD_SIMPLE_TYPES.get(JAVA2XML.get(javaType)); - } - - public Object toJavaObject(QName simpleType, String literal, TransformationContext context) { - /** - * <ul> - * <li>xsd:string --- java.lang.String - * <li>xsd:integer --- java.math.BigInteger - * <li>xsd:int --- int - * <li>xsd:long --- long - * <li>xsd:short --- short - * <li>xsd:decimal --- java.math.BigDecimal - * <li>xsd:float --- float - * <li>xsd:double --- double - * <li>xsd:boolean --- boolean - * <li>xsd:byte --- byte - * <li>xsd:QName --- javax.xml.namespace.QName - * <li>xsd:dateTime --- javax.xml.datatype.XMLGregorianCalendar - * <li>xsd:base64Binary --- byte[] - * <li>xsd:hexBinary --- byte[] - * <li>xsd:unsignedInt --- long - * <li>xsd:unsignedShort --- int - * <li>xsd:unsignedByte --- short - * <li>xsd:time --- javax.xml.datatype.XMLGregorianCalendar - * <li>xsd:date --- javax.xml.datatype.XMLGregorianCalendar - * <li>xsd:g* --- javax.xml.datatype.XMLGregorianCalendar - * <li>xsd:anySimpleType (for xsd:element of this type)a - * java.lang.Object - * <li>xsd:anySimpleType (for xsd:attribute of this type) - * java.lang.String - * <li>xsd:duration javax.xml.datatype.Duration - * <li>xsd:NOTATION javax.xml.namespace.QName - * </ul> - */ - - if (literal == null) { - return null; - } - String value = literal.trim(); - - QName type = simpleType; - if (type.equals(XSD_STRING)) { - return parseString(value); - } else if (type.equals(XSD_INT)) { - return parseInt(value); - } else if (type.equals(XSD_INTEGER)) { - return parseInteger(value); - } else if (type.equals(XSD_INT)) { - return parseInt(value); - } else if (type.equals(XSD_FLOAT)) { - return parseFloat(value); - } else if (type.equals(XSD_DOUBLE)) { - return parseDouble(value); - } else if (type.equals(XSD_SHORT)) { - return parseShort(value); - } else if (type.equals(XSD_DECIMAL)) { - return parseDecimal(value); - } else if (type.equals(XSD_BOOLEAN)) { - return parseBoolean(value); - } else if (type.equals(XSD_BYTE)) { - return parseByte(value); - } else if (type.equals(XSD_LONG)) { - return parseLong(value); - } else if (type.equals(XSD_UNSIGNEDBYTE)) { - return parseUnsignedShort(value); - } else if (type.equals(XSD_UNSIGNEDSHORT)) { - return parseUnsignedShort(value); - } else if (type.equals(XSD_UNSIGNEDINT)) { - return parseUnsignedInt(value); - } else if (type.equals(XSD_UNSIGNEDLONG)) { - return parseUnsignedInt(value); - } else if (type.equals(XSD_DATETIME)) { - return parseDateTime(value); - } else if (type.equals(XSD_DATE)) { - return parseDate(value); - } else if (type.equals(XSD_TIME)) { - return parseTime(value); - } else if (type.equals(XSD_DURATION)) { - return parseDuration(value); - } else if (type.equals(XSD_HEXBIN)) { - return parseHexBinary(value); - } else if (type.equals(XSD_BASE64)) { - return parseBase64Binary(value); - } else if (type.equals(XSD_QNAME)) { - NamespaceContext namespaceContext = - (NamespaceContext)((context != null) ? context.getMetadata().get(NamespaceContext.class.getName()) : null); - return parseQName(value, namespaceContext); - } else if (type.equals(XSD_NOTATION)) { - NamespaceContext namespaceContext = - (NamespaceContext)((context != null) ? context.getMetadata().get(NamespaceContext.class.getName()) : null); - return parseQName(value, namespaceContext); - } else if (type.equals(XSD_YEAR)) { - return factory.newXMLGregorianCalendar(value); - } else if (type.equals(XSD_MONTH)) { - return factory.newXMLGregorianCalendar(value); - } else if (type.equals(XSD_DAY)) { - return factory.newXMLGregorianCalendar(value); - } else if (type.equals(XSD_YEARMONTH)) { - return factory.newXMLGregorianCalendar(value); - } else if (type.equals(XSD_MONTHDAY)) { - return factory.newXMLGregorianCalendar(value); - } else { - return value; - } - } - - @SuppressWarnings("deprecation") - private XMLGregorianCalendar toXMLGregorianCalendar(Date date) { - GregorianCalendar c = - new GregorianCalendar(date.getYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), - date.getSeconds()); - return factory.newXMLGregorianCalendar(c); - } - - private XMLGregorianCalendar toXMLGregorianCalendar(GregorianCalendar calendar) { - return factory.newXMLGregorianCalendar(calendar); - } - - public String toXMLLiteral(QName simpleType, Object obj, TransformationContext context) { - if(obj == null) { - // It could be null if nilable=true - return null; - } - if (obj instanceof Float || obj instanceof Double) { - if (obj instanceof Float) { - return printDouble(((Float)obj).floatValue()); - } else { - return printDouble(((Double)obj).doubleValue()); - } - } else if (obj instanceof GregorianCalendar) { - GregorianCalendar calendar = (GregorianCalendar)obj; - return toXMLGregorianCalendar(calendar).toXMLFormat(); - } else if (obj instanceof Date) { - return toXMLGregorianCalendar((Date)obj).toXMLFormat(); - } else if (obj instanceof XMLGregorianCalendar) { - return ((XMLGregorianCalendar)obj).toXMLFormat(); - } else if (obj instanceof byte[]) { - if (simpleType != null) { - if (simpleType.equals(XSD_BASE64)) { - return printBase64Binary((byte[])obj); - } else if (simpleType.equals(XSD_HEXBIN)) { - return printHexBinary((byte[])obj); - } - } - } else if (obj instanceof QName) { - NamespaceContext namespaceContext = - (NamespaceContext)((context != null) ? context.getMetadata().get(NamespaceContext.class.getName()) : null); - return printQName((QName)obj, namespaceContext); - } - return obj.toString(); - } - - public boolean isSimpleXSDType(QName typeName) { - if (typeName == null) { - return false; - } - return typeName.getNamespaceURI().equals(URI_2001_SCHEMA_XSD) - && XSD_SIMPLE_TYPES.get(typeName.getLocalPart()) != null; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java deleted file mode 100644 index a5b8e0a0bd..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * 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.databinding.impl; - -import java.lang.ref.WeakReference; -import java.util.HashMap; -import java.util.Map; - -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -public class TransformationContextImpl implements TransformationContext { - private static final String SOURCE_OPERATION = "source.operation"; - - private static final String TARGET_OPERATION = "target.operation"; - - private DataType sourceDataType; - - private DataType targetDataType; - - private final Map<String, Object> metadata = new HashMap<String, Object>(); - - private WeakReference<ClassLoader> classLoaderRef; - - public TransformationContextImpl() { - super(); - // This is used only for testing - setClassLoader(Thread.currentThread().getContextClassLoader()); - } - - public TransformationContextImpl(DataType sourceDataType, - DataType targetDataType, - ClassLoader classLoader, - Map<String, Object> metadata) { - super(); - this.sourceDataType = sourceDataType; - this.targetDataType = targetDataType; - setClassLoader(classLoader); - if (metadata != null) { - this.metadata.putAll(metadata); - } - } - - public TransformationContextImpl(DataType sourceDataType, - DataType targetDataType, - Map<String, Object> metadata) { - super(); - this.sourceDataType = sourceDataType; - this.targetDataType = targetDataType; - setClassLoader(Thread.currentThread().getContextClassLoader()); - if (metadata != null) { - this.metadata.putAll(metadata); - } - } - - public DataType getSourceDataType() { - return sourceDataType; - } - - public DataType getTargetDataType() { - return targetDataType; - } - - public void setSourceDataType(DataType sourceDataType) { - this.sourceDataType = sourceDataType; - } - - public void setTargetDataType(DataType targetDataType) { - this.targetDataType = targetDataType; - } - - public final void setClassLoader(ClassLoader classLoader) { - this.classLoaderRef = new WeakReference<ClassLoader>(classLoader); - } - - public ClassLoader getClassLoader() { - return classLoaderRef.get(); - } - - public Map<String, Object> getMetadata() { - return metadata; - } - - /** - * @return the sourceOperation - */ - public Operation getSourceOperation() { - return (Operation) metadata.get(SOURCE_OPERATION); - } - - /** - * @param sourceOperation the sourceOperation to set - */ - public void setSourceOperation(Operation sourceOperation) { - this.metadata.put(SOURCE_OPERATION, sourceOperation); - } - - /** - * @return the targetOperation - */ - public Operation getTargetOperation() { - return (Operation) metadata.get(TARGET_OPERATION); - } - - /** - * @param targetOperation the targetOperation to set - */ - public void setTargetOperation(Operation targetOperation) { - this.metadata.put(TARGET_OPERATION, targetOperation); - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/XSDDataTypeConverter.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/XSDDataTypeConverter.java deleted file mode 100644 index fb747864e7..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/XSDDataTypeConverter.java +++ /dev/null @@ -1,945 +0,0 @@ -/* - * 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.databinding.impl; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.Writer; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.text.FieldPosition; -import java.text.Format; -import java.text.ParsePosition; -import java.util.Calendar; -import java.util.TimeZone; - -import javax.xml.XMLConstants; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.Duration; -import javax.xml.namespace.NamespaceContext; -import javax.xml.namespace.QName; - -/** - * Utility class for XSD data type conversions - * - * @version $Rev$ $Date$ - */ -public class XSDDataTypeConverter { - public static final class Base64Binary { - private static final char[] S_BASE64CHAR = - {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', - 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', - '5', '6', '7', '8', '9', '+', '/'}; - - private static final char S_BASE64PAD = '='; - - private static final byte[] S_DECODETABLE = new byte[128]; - - static { - for (int i = 0; i < S_DECODETABLE.length; i++) { - S_DECODETABLE[i] = Byte.MAX_VALUE; // 127 - } - for (int i = 0; i < S_BASE64CHAR.length; i++) { - // 0 to 63 - S_DECODETABLE[S_BASE64CHAR[i]] = (byte) i; - } - } - - private Base64Binary() { - } - - /** - * - */ - public static byte[] decode(char[] data, int off, int len) { - char[] ibuf = new char[4]; - int ibufcount = 0; - byte[] obuf = new byte[len / 4 * 3 + 3]; - int obufcount = 0; - for (int i = off; i < off + len; i++) { - char ch = data[i]; - if (ch == S_BASE64PAD || ch < S_DECODETABLE.length && S_DECODETABLE[ch] != Byte.MAX_VALUE) { - ibuf[ibufcount++] = ch; - if (ibufcount == ibuf.length) { - ibufcount = 0; - obufcount += decode0(ibuf, obuf, obufcount); - } - } - } - if (obufcount == obuf.length) { - return obuf; - } - byte[] ret = new byte[obufcount]; - System.arraycopy(obuf, 0, ret, 0, obufcount); - return ret; - } - - /** - * - */ - public static void decode(char[] data, int off, int len, OutputStream ostream) throws IOException { - char[] ibuf = new char[4]; - int ibufcount = 0; - byte[] obuf = new byte[3]; - for (int i = off; i < off + len; i++) { - char ch = data[i]; - if (ch == S_BASE64PAD || ch < S_DECODETABLE.length && S_DECODETABLE[ch] != Byte.MAX_VALUE) { - ibuf[ibufcount++] = ch; - if (ibufcount == ibuf.length) { - ibufcount = 0; - int obufcount = decode0(ibuf, obuf, 0); - ostream.write(obuf, 0, obufcount); - } - } - } - } - - /** - * - */ - public static byte[] decode(String data) { - char[] ibuf = new char[4]; - int ibufcount = 0; - byte[] obuf = new byte[data.length() / 4 * 3 + 3]; - int obufcount = 0; - for (int i = 0; i < data.length(); i++) { - char ch = data.charAt(i); - if (ch == S_BASE64PAD || ch < S_DECODETABLE.length && S_DECODETABLE[ch] != Byte.MAX_VALUE) { - ibuf[ibufcount++] = ch; - if (ibufcount == ibuf.length) { - ibufcount = 0; - obufcount += decode0(ibuf, obuf, obufcount); - } - } - } - if (obufcount == obuf.length) { - return obuf; - } - byte[] ret = new byte[obufcount]; - System.arraycopy(obuf, 0, ret, 0, obufcount); - return ret; - } - - /** - * - */ - public static void decode(String data, OutputStream ostream) throws IOException { - char[] ibuf = new char[4]; - int ibufcount = 0; - byte[] obuf = new byte[3]; - for (int i = 0; i < data.length(); i++) { - char ch = data.charAt(i); - if (ch == S_BASE64PAD || ch < S_DECODETABLE.length && S_DECODETABLE[ch] != Byte.MAX_VALUE) { - ibuf[ibufcount++] = ch; - if (ibufcount == ibuf.length) { - ibufcount = 0; - int obufcount = decode0(ibuf, obuf, 0); - ostream.write(obuf, 0, obufcount); - } - } - } - } - - private static int decode0(char[] ibuf, byte[] obuf, int index) { - int wp = index; - int outlen = 3; - if (ibuf[3] == S_BASE64PAD) { - outlen = 2; - } - if (ibuf[2] == S_BASE64PAD) { - outlen = 1; - } - int b0 = S_DECODETABLE[ibuf[0]]; - int b1 = S_DECODETABLE[ibuf[1]]; - int b2 = S_DECODETABLE[ibuf[2]]; - int b3 = S_DECODETABLE[ibuf[3]]; - switch (outlen) { - case 1: - obuf[wp] = (byte) (b0 << 2 & 0xfc | b1 >> 4 & 0x3); - return 1; - case 2: - obuf[wp++] = (byte) (b0 << 2 & 0xfc | b1 >> 4 & 0x3); - obuf[wp] = (byte) (b1 << 4 & 0xf0 | b2 >> 2 & 0xf); - return 2; - case 3: - obuf[wp++] = (byte) (b0 << 2 & 0xfc | b1 >> 4 & 0x3); - obuf[wp++] = (byte) (b1 << 4 & 0xf0 | b2 >> 2 & 0xf); - obuf[wp] = (byte) (b2 << 6 & 0xc0 | b3 & 0x3f); - return 3; - default: - throw new IllegalArgumentException("The character sequence is not base64 encoded."); - } - } - - /** - * Returns base64 representation of specified byte array. - */ - public static String encode(byte[] data) { - return encode(data, 0, data.length); - } - - /** - * Returns base64 representation of specified byte array. - */ - public static String encode(byte[] data, int off, int len) { - if (len <= 0) { - return ""; - } - char[] out = new char[len / 3 * 4 + 4]; - int rindex = off; - int windex = 0; - int rest = len - off; - while (rest >= 3) { - int i = - ((data[rindex] & 0xff) << 16) + ((data[rindex + 1] & 0xff) << 8) - + (data[rindex + 2] & 0xff); - out[windex++] = S_BASE64CHAR[i >> 18]; - out[windex++] = S_BASE64CHAR[(i >> 12) & 0x3f]; - out[windex++] = S_BASE64CHAR[(i >> 6) & 0x3f]; - out[windex++] = S_BASE64CHAR[i & 0x3f]; - rindex += 3; - rest -= 3; - } - if (rest == 1) { - int i = data[rindex] & 0xff; - out[windex++] = S_BASE64CHAR[i >> 2]; - out[windex++] = S_BASE64CHAR[(i << 4) & 0x3f]; - out[windex++] = S_BASE64PAD; - out[windex++] = S_BASE64PAD; - } else if (rest == 2) { - int i = ((data[rindex] & 0xff) << 8) + (data[rindex + 1] & 0xff); - out[windex++] = S_BASE64CHAR[i >> 10]; - out[windex++] = S_BASE64CHAR[(i >> 4) & 0x3f]; - out[windex++] = S_BASE64CHAR[(i << 2) & 0x3f]; - out[windex++] = S_BASE64PAD; - } - return new String(out, 0, windex); - } - - /** - * Outputs base64 representation of the specified byte array to a byte stream. - */ - public static void encode(byte[] data, int off, int len, OutputStream ostream) throws IOException { - if (len <= 0) { - return; - } - byte[] out = new byte[4]; - int rindex = off; - int rest = len - off; - while (rest >= 3) { - int i = - ((data[rindex] & 0xff) << 16) + ((data[rindex + 1] & 0xff) << 8) - + (data[rindex + 2] & 0xff); - out[0] = (byte) S_BASE64CHAR[i >> 18]; - out[1] = (byte) S_BASE64CHAR[(i >> 12) & 0x3f]; - out[2] = (byte) S_BASE64CHAR[(i >> 6) & 0x3f]; - out[3] = (byte) S_BASE64CHAR[i & 0x3f]; - ostream.write(out, 0, 4); - rindex += 3; - rest -= 3; - } - if (rest == 1) { - int i = data[rindex] & 0xff; - out[0] = (byte) S_BASE64CHAR[i >> 2]; - out[1] = (byte) S_BASE64CHAR[(i << 4) & 0x3f]; - out[2] = (byte) S_BASE64PAD; - out[3] = (byte) S_BASE64PAD; - ostream.write(out, 0, 4); - } else if (rest == 2) { - int i = ((data[rindex] & 0xff) << 8) + (data[rindex + 1] & 0xff); - out[0] = (byte) S_BASE64CHAR[i >> 10]; - out[1] = (byte) S_BASE64CHAR[(i >> 4) & 0x3f]; - out[2] = (byte) S_BASE64CHAR[(i << 2) & 0x3f]; - out[3] = (byte) S_BASE64PAD; - ostream.write(out, 0, 4); - } - } - - /** - * Outputs base64 representation of the specified byte array to a character stream. - */ - public static void encode(byte[] data, int off, int len, Writer writer) throws IOException { - if (len <= 0) { - return; - } - char[] out = new char[4]; - int rindex = off; - int rest = len - off; - int output = 0; - while (rest >= 3) { - int i = - ((data[rindex] & 0xff) << 16) + ((data[rindex + 1] & 0xff) << 8) - + (data[rindex + 2] & 0xff); - out[0] = S_BASE64CHAR[i >> 18]; - out[1] = S_BASE64CHAR[(i >> 12) & 0x3f]; - out[2] = S_BASE64CHAR[(i >> 6) & 0x3f]; - out[3] = S_BASE64CHAR[i & 0x3f]; - writer.write(out, 0, 4); - rindex += 3; - rest -= 3; - output += 4; - if (output % 76 == 0) { - writer.write("\n"); - } - } - if (rest == 1) { - int i = data[rindex] & 0xff; - out[0] = S_BASE64CHAR[i >> 2]; - out[1] = S_BASE64CHAR[(i << 4) & 0x3f]; - out[2] = S_BASE64PAD; - out[3] = S_BASE64PAD; - writer.write(out, 0, 4); - } else if (rest == 2) { - int i = ((data[rindex] & 0xff) << 8) + (data[rindex + 1] & 0xff); - out[0] = S_BASE64CHAR[i >> 10]; - out[1] = S_BASE64CHAR[(i >> 4) & 0x3f]; - out[2] = S_BASE64CHAR[(i << 2) & 0x3f]; - out[3] = S_BASE64PAD; - writer.write(out, 0, 4); - } - } - } - - /** - * <p/> - * Utility class for xs:hexbinary. </p> - */ - public static final class HexBinary { - private HexBinary() { - } - - /** - * Converts the string <code>pValue</code> into an array of hex bytes. - */ - public static byte[] decode(String pValue) { - if ((pValue.length() % 2) != 0) { - throw new IllegalArgumentException("A HexBinary string must have even length."); - } - byte[] result = new byte[pValue.length() / 2]; - int j = 0; - int i = 0; - while (i < pValue.length()) { - byte b; - char c = pValue.charAt(i++); - char d = pValue.charAt(i++); - if (c >= '0' && c <= '9') { - b = (byte) ((c - '0') << 4); - } else if (c >= 'A' && c <= 'F') { - b = (byte) ((c - 'A' + 10) << 4); - } else if (c >= 'a' && c <= 'f') { - b = (byte) ((c - 'a' + 10) << 4); - } else { - throw new IllegalArgumentException("Invalid hex digit: " + c); - } - if (d >= '0' && d <= '9') { - b += (byte) (d - '0'); - } else if (d >= 'A' && d <= 'F') { - b += (byte) (d - 'A' + 10); - } else if (d >= 'a' && d <= 'f') { - b += (byte) (d - 'a' + 10); - } else { - throw new IllegalArgumentException("Invalid hex digit: " + d); - } - result[j++] = b; - } - return result; - } - - /** - * Converts the byte array <code>pHexBinary</code> into a string. - */ - public static String encode(byte[] pHexBinary) { - StringBuffer result = new StringBuffer(); - for (int i = 0; i < pHexBinary.length; i++) { - byte b = pHexBinary[i]; - byte c = (byte) ((b & 0xf0) >> 4); - if (c <= 9) { - result.append((char) ('0' + c)); - } else { - result.append((char) ('A' + c - 10)); - } - c = (byte) (b & 0x0f); - if (c <= 9) { - result.append((char) ('0' + c)); - } else { - result.append((char) ('A' + c - 10)); - } - } - return result.toString(); - } - - /** - * Creates a clone of the given byte array. - */ - public static byte[] getClone(byte[] pHexBinary) { - byte[] result = new byte[pHexBinary.length]; - System.arraycopy(pHexBinary, 0, result, 0, pHexBinary.length); - return result; - } - } - - public class XSDDateFormat extends XSDDateTimeFormat { - private static final long serialVersionUID = -1629412916827246627L; - - /** - * Creates a new instance. - */ - public XSDDateFormat() { - super(true, false); - } - } - - /** - * <p/> - * An instance of {@link java.text.Format}, which may be used to parse and format <code>xs:dateTime</code> values. - * </p> - */ - public static class XSDDateTimeFormat extends Format { - private static final long serialVersionUID = -1148332471737068969L; - - final boolean parseDate; - - final boolean parseTime; - - /** - * Creates a new instance. - */ - public XSDDateTimeFormat() { - this(true, true); - } - - XSDDateTimeFormat(boolean pParseDate, boolean pParseTime) { - parseDate = pParseDate; - parseTime = pParseTime; - } - - private void append(StringBuffer pBuffer, int pNum, int pMinLen) { - String s = Integer.toString(pNum); - for (int i = s.length(); i < pMinLen; i++) { - pBuffer.append('0'); - } - pBuffer.append(s); - } - - @Override - public StringBuffer format(Object pCalendar, StringBuffer pBuffer, FieldPosition pPos) { - assert pCalendar != null : "The Calendar argument must not be null."; - assert pBuffer != null : "The StringBuffer argument must not be null."; - assert pPos != null : "The FieldPosition argument must not be null."; - - Calendar cal = (Calendar) pCalendar; - if (parseDate) { - int year = cal.get(Calendar.YEAR); - if (year < 0) { - pBuffer.append('-'); - year = -year; - } - append(pBuffer, year, 4); - pBuffer.append('-'); - append(pBuffer, cal.get(Calendar.MONTH) + 1, 2); - pBuffer.append('-'); - append(pBuffer, cal.get(Calendar.DAY_OF_MONTH), 2); - if (parseTime) { - pBuffer.append('T'); - } - } - if (parseTime) { - append(pBuffer, cal.get(Calendar.HOUR_OF_DAY), 2); - pBuffer.append(':'); - append(pBuffer, cal.get(Calendar.MINUTE), 2); - pBuffer.append(':'); - append(pBuffer, cal.get(Calendar.SECOND), 2); - int millis = cal.get(Calendar.MILLISECOND); - if (millis > 0) { - pBuffer.append('.'); - append(pBuffer, millis, 3); - } - } - TimeZone tz = cal.getTimeZone(); - // JDK 1.4: int offset = tz.getOffset(cal.getTimeInMillis()); - int offset = cal.get(Calendar.ZONE_OFFSET); - if (tz.inDaylightTime(cal.getTime())) { - offset += cal.get(Calendar.DST_OFFSET); - } - if (offset == 0) { - pBuffer.append('Z'); - } else { - if (offset < 0) { - pBuffer.append('-'); - offset = -offset; - } else { - pBuffer.append('+'); - } - int minutes = offset / (60 * 1000); - int hours = minutes / 60; - minutes -= hours * 60; - append(pBuffer, hours, 2); - pBuffer.append(':'); - append(pBuffer, minutes, 2); - } - return pBuffer; - } - - private int parseInt(String pString, int offset, StringBuffer pDigits) { - int length = pString.length(); - int pOffset = offset; - pDigits.setLength(0); - while (pOffset < length) { - char c = pString.charAt(pOffset); - if (Character.isDigit(c)) { - pDigits.append(c); - ++pOffset; - } else { - break; - } - } - return pOffset; - } - - @Override - public Object parseObject(String pString, ParsePosition pParsePosition) { - assert pString != null : "The String argument must not be null."; - assert pParsePosition != null : "The ParsePosition argument must not be null."; - int offset = pParsePosition.getIndex(); - int length = pString.length(); - - boolean isMinus = false; - StringBuffer digits = new StringBuffer(); - int year = 0; - int month = 0; - int mday = 0; - if (parseDate) { - // Sign - if (offset < length) { - char c = pString.charAt(offset); - if (c == '+') { - ++offset; - } else if (c == '-') { - ++offset; - isMinus = true; - } - } - - offset = parseInt(pString, offset, digits); - if (digits.length() < 4) { - pParsePosition.setErrorIndex(offset); - return null; - } - year = Integer.parseInt(digits.toString()); - - if (offset < length && pString.charAt(offset) == '-') { - ++offset; - } else { - pParsePosition.setErrorIndex(offset); - return null; - } - - offset = parseInt(pString, offset, digits); - if (digits.length() != 2) { - pParsePosition.setErrorIndex(offset); - return null; - } - month = Integer.parseInt(digits.toString()); - - if (offset < length && pString.charAt(offset) == '-') { - ++offset; - } else { - pParsePosition.setErrorIndex(offset); - return null; - } - - offset = parseInt(pString, offset, digits); - if (digits.length() != 2) { - pParsePosition.setErrorIndex(offset); - return null; - } - mday = Integer.parseInt(digits.toString()); - - if (parseTime) { - if (offset < length && pString.charAt(offset) == 'T') { - ++offset; - } else { - pParsePosition.setErrorIndex(offset); - return null; - } - } - } else { - year = month = mday = 0; - } - - int hour = 0; - int minute = 0; - int second = 0; - int millis = 0; - if (parseTime) { - offset = parseInt(pString, offset, digits); - if (digits.length() != 2) { - pParsePosition.setErrorIndex(offset); - return null; - } - hour = Integer.parseInt(digits.toString()); - - if (offset < length && pString.charAt(offset) == ':') { - ++offset; - } else { - pParsePosition.setErrorIndex(offset); - return null; - } - - offset = parseInt(pString, offset, digits); - if (digits.length() != 2) { - pParsePosition.setErrorIndex(offset); - return null; - } - minute = Integer.parseInt(digits.toString()); - - if (offset < length && pString.charAt(offset) == ':') { - ++offset; - } else { - pParsePosition.setErrorIndex(offset); - return null; - } - - offset = parseInt(pString, offset, digits); - if (digits.length() != 2) { - pParsePosition.setErrorIndex(offset); - return null; - } - second = Integer.parseInt(digits.toString()); - - if (offset < length && pString.charAt(offset) == '.') { - ++offset; - offset = parseInt(pString, offset, digits); - if (digits.length() > 0) { - millis = Integer.parseInt(digits.toString()); - } else { - millis = 0; - } - } else { - millis = 0; - } - } else { - hour = minute = second = millis = 0; - } - - digits.setLength(0); - digits.append("GMT"); - if (offset < length) { - char c = pString.charAt(offset); - if (c == 'Z') { - // Ignore UTC, it is the default - ++offset; - } else if (c == '+' || c == '-') { - digits.append(c); - ++offset; - for (int i = 0; i < 5; i++) { - if (offset >= length) { - pParsePosition.setErrorIndex(offset); - return null; - } - c = pString.charAt(offset); - if ((i != 2 && Character.isDigit(c)) || (i == 2 && c == ':')) { - digits.append(c); - } else { - pParsePosition.setErrorIndex(offset); - return null; - } - ++offset; - } - } - } - - Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(digits.toString())); - cal.set(isMinus ? -year : year, parseDate ? month - 1 : month, mday, hour, minute, second); - cal.set(Calendar.MILLISECOND, millis); - pParsePosition.setIndex(offset); - return cal; - } - } - - public static class XSDTimeFormat extends XSDDateTimeFormat { - private static final long serialVersionUID = 1346506860724640517L; - - /** - * Creates a new instance. - */ - public XSDTimeFormat() { - super(false, true); - } - } - - private static final long MAX_UNSIGNED_INT = (((long) Integer.MAX_VALUE) * 2) + 1; - - private static final int MAX_UNSIGNED_SHORT = Short.MAX_VALUE * 2 + 1; - - public String parseAnySimpleType(String value) { - return value; - } - - public byte[] parseBase64Binary(String value) { - return Base64Binary.decode(value); - } - - public boolean parseBoolean(String value) { - return Boolean.valueOf(value).booleanValue(); - } - - public byte parseByte(String value) { - return Byte.parseByte(value); - } - - public Calendar parseDate(String value) { - XSDDateFormat format = new XSDDateFormat(); - ParsePosition pos = new ParsePosition(0); - Calendar cal = (Calendar) format.parseObject(value, pos); - if (cal == null) { - throw new IllegalArgumentException("Failed to parse date " + value + " at:" - + value.substring(pos.getErrorIndex())); - } - return cal; - } - - public Calendar parseDateTime(String value) { - XSDDateTimeFormat format = new XSDDateTimeFormat(); - ParsePosition pos = new ParsePosition(0); - Calendar cal = (Calendar) format.parseObject(value, pos); - if (cal == null) { - throw new IllegalArgumentException("Failed to parse dateTime " + value + " at:" - + value.substring(pos.getErrorIndex())); - } - return cal; - } - - public BigDecimal parseDecimal(String value) { - return new BigDecimal(value); - } - - public double parseDouble(String value) { - if ("INF".equals(value)) { - return Double.POSITIVE_INFINITY; - } else if ("-INF".equals(value)) { - return Double.NEGATIVE_INFINITY; - } else if ("NaN".equals(value)) { - return Double.NaN; - } else { - return Double.parseDouble(value); - } - } - - public Duration parseDuration(String pDuration) { - try { - return DatatypeFactory.newInstance().newDuration(pDuration); - } catch (DatatypeConfigurationException e) { - throw new IllegalArgumentException(e); - } - } - - public float parseFloat(String value) { - if ("INF".equals(value)) { - return Float.POSITIVE_INFINITY; - } else if ("-INF".equals(value)) { - return Float.NEGATIVE_INFINITY; - } else if ("NaN".equals(value)) { - return Float.NaN; - } else { - return Float.parseFloat(value); - } - } - - public byte[] parseHexBinary(String value) { - return HexBinary.decode(value); - } - - public int parseInt(String value) { - return Integer.parseInt(value); - } - - public BigInteger parseInteger(String value) { - return new BigInteger(value); - } - - public long parseLong(String value) { - return Long.parseLong(value); - } - - public QName parseQName(String value, NamespaceContext context) { - int offset = value.indexOf(':'); - String uri; - String localName; - switch (offset) { - case -1: - localName = value; - uri = context.getNamespaceURI(""); - if (uri == null) { - // Should not happen, indicates an error in the - // NamespaceContext - // implementation - throw new IllegalArgumentException("The default prefix is not bound."); - } - break; - case 0: - throw new IllegalArgumentException("Default prefix must be indicated by not using a colon: " - + value); - default: - String prefix = value.substring(0, offset); - localName = value.substring(offset + 1); - uri = context.getNamespaceURI(prefix); - if (uri == null) { - throw new IllegalArgumentException("The prefix " + prefix + " is not bound."); - } - } - return new QName(uri, localName); - } - - public short parseShort(String value) { - return Short.parseShort(value); - } - - public String parseString(String value) { - return value; - } - - public Calendar parseTime(String value) { - XSDTimeFormat format = new XSDTimeFormat(); - ParsePosition pos = new ParsePosition(0); - Calendar cal = (Calendar) format.parseObject(value, pos); - if (cal == null) { - throw new IllegalArgumentException("Failed to parse time " + value + " at:" - + value.substring(pos.getErrorIndex())); - } - return cal; - } - - public long parseUnsignedInt(String value) { - long l = Long.parseLong(value); - if (l < 0) { - throw new IllegalArgumentException("Failed to parse UnsignedInt " + value - + ": result is negative"); - } - if (l > MAX_UNSIGNED_INT) { - throw new IllegalArgumentException("Failed to parse UnsignedInt " + value - + ": result exceeds maximum value " + MAX_UNSIGNED_INT); - } - return l; - } - - public int parseUnsignedShort(String value) { - int i = Integer.parseInt(value); - if (i < 0) { - throw new IllegalArgumentException("Failed to parse UnsignedShort " + value - + ": result is negative"); - } - if (i > MAX_UNSIGNED_SHORT) { - throw new IllegalArgumentException("Failed to parse UnsignedShort " + value - + ": result exceeds maximum value " + MAX_UNSIGNED_SHORT); - } - return i; - } - - public String printAnySimpleType(String value) { - return value; - } - - public String printBase64Binary(byte[] value) { - return Base64Binary.encode(value); - } - - public String printBoolean(boolean value) { - return (value ? Boolean.TRUE : Boolean.FALSE).toString(); - } - - public String printByte(byte value) { - return Byte.toString(value); - } - - public String printDate(Calendar value) { - return new XSDDateFormat().format(value); - } - - public String printDateTime(Calendar value) { - return new XSDDateTimeFormat().format(value); - } - - public String printDecimal(BigDecimal value) { - return value.toString(); - } - - public String printDouble(double value) { - return Double.toString(value); - } - - public String printDuration(Duration pDuration) { - return pDuration.toString(); - } - - public String printFloat(float value) { - return Float.toString(value); - } - - public String printHexBinary(byte[] value) { - return HexBinary.encode(value); - } - - public String printInt(int value) { - return Integer.toString(value); - } - - public String printInteger(BigInteger value) { - return value.toString(); - } - - public String printLong(long value) { - return Long.toString(value); - } - - public String printQName(QName value, NamespaceContext context) { - String prefix = context.getPrefix(value.getNamespaceURI()); - if (prefix == null) { - throw new IllegalArgumentException("The namespace URI " + value.getNamespaceURI() - + " is not bound."); - } else if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) { - return value.getLocalPart(); - } else { - return prefix + ":" + value.getLocalPart(); - } - } - - public String printShort(short value) { - return Short.toString(value); - } - - public String printString(String value) { - return value; - } - - public String printTime(Calendar value) { - return new XSDTimeFormat().format(value); - } - - public String printUnsignedInt(long value) { - return Long.toString(value); - } - - public String printUnsignedShort(int value) { - return Integer.toString(value); - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java deleted file mode 100644 index fbca9b0444..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/DOMNode2JavaBeanTransformer.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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.databinding.javabeans; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import javax.xml.namespace.QName; - -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Transformer to convert data from DOM Node to JavaBean - * - * @version $Rev$ $Date$ - */ -public class DOMNode2JavaBeanTransformer extends XML2JavaBeanTransformer<Node> { - - @Override - public Node getRootElement(Node element) throws XML2JavaMapperException { - if (element instanceof Document) { - return ((Document)element).getDocumentElement(); - } else { - return element; - } - - } - - @Override - public Iterator<Node> getChildElements(Node parent) throws XML2JavaMapperException { - NodeList nodeList = parent.getChildNodes(); - List<Node> nodeArrayList = new ArrayList<Node>(nodeList.getLength()); - for (int count = 0; count < nodeList.getLength(); ++count) { - nodeArrayList.add(nodeList.item(count)); - } - - return nodeArrayList.iterator(); - } - - @Override - public String getElementName(Node element) throws XML2JavaMapperException { - return element.getLocalName(); - } - - @Override - public String getText(Node element) throws XML2JavaMapperException { - if (element instanceof Document) { - element = ((Document)element).getDocumentElement(); - } - return element.getTextContent(); - } - - @Override - public boolean isTextElement(Node element) throws XML2JavaMapperException { - return element.getNodeType() == Node.TEXT_NODE; - } - - @Override - public boolean isTextOnly(Node element) throws XML2JavaMapperException { - NodeList childNodes = element.getChildNodes(); - return childNodes.getLength() == 1 && isTextElement(childNodes.item(0)); - } - - @Override - public Node getFirstChildWithName(Node element, QName name) throws XML2JavaMapperException { - Node child; - for (child = element.getFirstChild(); - child != null && !(child.getNodeName() == name.getLocalPart() - && child.getNamespaceURI() == name.getNamespaceURI()) ; - child = child.getNextSibling()) { - } - return child; - } - - @Override - public Class getSourceType() { - return Node.class; - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java deleted file mode 100644 index 5dc13bd60b..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/Java2XMLMapperException.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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.databinding.javabeans; - -import javax.xml.namespace.QName; - -/** - * This exception is used to encapsulate and rethrow exceptions that arise out - * of converting JavaBean objects to XML - * - * @version $Rev$ $Date$ - */ -public class Java2XMLMapperException extends RuntimeException { - private static final long serialVersionUID = 6811924384399578686L; - - private QName xmlElementName; - private String javaFieldName; - private Class javaType; - - public Java2XMLMapperException(String message) { - super(message); - } - - public Java2XMLMapperException(Throwable cause) { - super(cause); - } - - public String getJavaFieldName() { - return javaFieldName; - } - - public void setJavaFieldName(String javaFieldName) { - this.javaFieldName = javaFieldName; - } - - public Class getJavaType() { - return javaType; - } - - public void setJavaType(Class javaType) { - this.javaType = javaType; - } - - public QName getXmlElementName() { - return xmlElementName; - } - - public void setXmlElementName(QName xmlElementName) { - this.xmlElementName = xmlElementName; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java deleted file mode 100644 index f582499b70..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2DOMNodeTransformer.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.databinding.javabeans; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * Transformer to convert data from a JavaBean object to DOM Node - * - * @version $Rev$ $Date$ - */ -public class JavaBean2DOMNodeTransformer extends JavaBean2XMLTransformer<Node> { - - public static final String COLON = ":"; - private DOMHelper helper; - - public JavaBean2DOMNodeTransformer(ExtensionPointRegistry registry) { - super(); - helper = DOMHelper.getInstance(registry); - } - - @Override - public void appendChild(Node parentElement, Node childElement) throws Java2XMLMapperException { - parentElement.appendChild(childElement); - } - - @Override - public Node createElement(QName qName) throws Java2XMLMapperException { - String qualifedName = - (qName.getPrefix() == null || qName.getPrefix().length() <= 0) ? qName.getLocalPart() - : qName.getPrefix() + COLON + qName.getLocalPart(); - return helper.newDocument().createElementNS(qName.getNamespaceURI(), qualifedName); - } - - @Override - public void appendText(Node parentElement, String textData) throws Java2XMLMapperException { - Document document = helper.newDocument(); - Node textNode; - if (textData != null) { - textNode = document.createTextNode(textData); - } else { - Attr nil = document.createAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:nil"); - nil.setValue("true"); - textNode = nil; - } - appendChild(parentElement, textNode); - } - - @Override - public Class getTargetType() { - return Node.class; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReaderTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReaderTransformer.java deleted file mode 100644 index 4942fef0da..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLStreamReaderTransformer.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.databinding.javabeans; - -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.xml.BeanXMLStreamReaderImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from a JavaBean object to XMLStreamReader. - * - * @version $Rev$ $Date$ - */ -public class JavaBean2XMLStreamReaderTransformer extends BaseTransformer<Object, XMLStreamReader> implements - PullTransformer<Object, XMLStreamReader> { - - public XMLStreamReader transform(Object source, TransformationContext context) { - try { - javax.xml.namespace.QName name = null; - if (context != null) { - Object logical = context.getSourceDataType().getLogical(); - if (logical instanceof XMLType) { - name = ((XMLType)logical).getElementName(); - } - } - return new BeanXMLStreamReaderImpl(name, source); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Object> getSourceType() { - return Object.class; - } - - @Override - protected Class<XMLStreamReader> getTargetType() { - return XMLStreamReader.class; - } - - @Override - public int getWeight() { - return 50; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java deleted file mode 100644 index b94b944a98..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java +++ /dev/null @@ -1,262 +0,0 @@ -/* - * 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.databinding.javabeans; - -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.Date; -import java.util.GregorianCalendar; - -import javax.xml.datatype.XMLGregorianCalendar; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from a JavaBean object to xml - * - * @version $Rev$ $Date$ - */ -public abstract class JavaBean2XMLTransformer<T> extends BaseTransformer<Object, T> implements - PullTransformer<Object, T> { - - public static final String GET = "get"; - public static final String PREFIX = "n"; - public static final String PERIOD = "."; - public static final String FWD_SLASH = "/"; - public static final String HTTP = "http://"; - private static int prefixCount = 1; - - protected SimpleTypeMapperImpl mapper; - - public JavaBean2XMLTransformer() { - this.mapper = new SimpleTypeMapperImpl(); - } - - public T transform(Object source, TransformationContext context) { - QName rootElement = null; - if (context != null) { - DataType<?> type = context.getTargetDataType(); - if (type != null) { - Object logical = type.getLogical(); - if (logical instanceof XMLType) { - rootElement = ((XMLType)logical).getElementName(); - } - } - } - //FIXME See how/if we still need to get the metadata here - //QName rootElementName = (QName)context.getTargetDataType().getMetadata("RootElementName"); - //if (rootElementName == null) { - QName rootElementName = new QName(resolveRootElementName(source.getClass())); - //} - - T root = createElement(rootElementName); - appendChildElements(root, resolveElementName(source.getClass()), source.getClass(), source, context); - return root; - } - - private void appendChildElements(T parent, - QName elementName, - Class javaType, - Object javaObject, - TransformationContext context) { - T element = null; - if (javaObject != null) { - if (javaType.isPrimitive() || isSimpleJavaType(javaObject)) { - appendText(parent, mapper.toXMLLiteral(null, javaObject, context)); - } else if (javaType.isArray()) { - int size = Array.getLength(javaObject); - for (int count = 0; count < size; ++count) { - Object item = Array.get(javaObject, count); - element = createElement(elementName); - appendChild(parent, element); - appendChildElements(element, elementName, javaType.getComponentType(), item, context); - } - } else { - Field[] javaFields = javaType.getFields(); - for (Field aField : javaFields) { - try { - QName fieldElementName = new QName(aField.getName()); - if (!aField.getType().isArray()) { - element = createElement(fieldElementName); - appendChild(parent, element); - appendChildElements(element, - fieldElementName, - aField.getType(), - aField.get(javaObject), - context); - } else { - appendChildElements(parent, - fieldElementName, - aField.getType(), - aField.get(javaObject), - context); - } - } catch (IllegalAccessException e) { - Java2XMLMapperException java2xmlEx = new Java2XMLMapperException(e); - java2xmlEx.setJavaFieldName(aField.getName()); - java2xmlEx.setJavaType(javaType); - throw java2xmlEx; - } - } - - Method[] methods = javaType.getMethods(); - String fieldName = null; - for (Method aMethod : methods) { - try { - if (Modifier.isPublic(aMethod.getModifiers()) && aMethod.getName().startsWith(GET) - && aMethod.getParameterTypes().length == 0 - && isMappedGetter(aMethod.getName())) { - fieldName = resolveFieldFromMethod(aMethod.getName()); - try { - javaType.getField(fieldName); - } catch (NoSuchFieldException e) { - QName fieldElementName = new QName(fieldName); - if (aMethod.getReturnType().isArray()) { - appendChildElements(parent, fieldElementName, aMethod.getReturnType(), aMethod - .invoke(javaObject, new Object[0]), context); - } else { - element = createElement(fieldElementName); - appendChild(parent, element); - appendChildElements(element, fieldElementName, aMethod.getReturnType(), aMethod - .invoke(javaObject, new Object[0]), context); - } - } - } - } catch (IllegalAccessException e) { - Java2XMLMapperException java2xmlEx = new Java2XMLMapperException(e); - java2xmlEx.setJavaFieldName(fieldName); - java2xmlEx.setJavaType(javaType); - throw java2xmlEx; - } catch (InvocationTargetException e) { - Java2XMLMapperException java2xmlEx = new Java2XMLMapperException(e); - java2xmlEx.setJavaFieldName(fieldName); - java2xmlEx.setJavaType(javaType); - throw java2xmlEx; - } - } - } - } - } - - /* - * Subclasses can override this method to prevent some getter methods - * from being mapped. The default implementation provided by this class - * maps all getter methods. - */ - protected boolean isMappedGetter(String methodName) { - return true; - } - - @Override - public String getSourceDataBinding() { - return JavaBeansDataBinding.NAME; - } - - @Override - public Class<Object> getSourceType() { - return Object.class; - } - - private boolean isSimpleJavaType(Object javaObject) { - if (javaObject instanceof String) { - return true; - } - if (javaObject instanceof Byte || javaObject instanceof Character - || javaObject instanceof Short - || javaObject instanceof Integer - || javaObject instanceof Long - || javaObject instanceof Float - || javaObject instanceof Double - || javaObject instanceof Boolean) { - return true; - } - if (javaObject instanceof GregorianCalendar || javaObject instanceof Date - || javaObject instanceof XMLGregorianCalendar - || javaObject instanceof byte[] - || javaObject instanceof QName) { - return true; - } - return false; - } - - private String resolveRootElementName(Class javaType) { - if (javaType.isArray()) { - return javaType.getComponentType().getSimpleName() + "_collection"; - } else { - return javaType.getSimpleName() + "_instance"; - } - } - - private QName resolveElementName(Class javaType) { - if (javaType.isArray()) { - return new QName(javaType.getComponentType().getSimpleName()); - } else { - return new QName(javaType.getSimpleName()); - } - } - - private String resolveFieldFromMethod(String methodName) { - StringBuffer fieldName = new StringBuffer(); - fieldName.append(Character.toLowerCase(methodName.charAt(GET.length()))); - fieldName.append(methodName.substring(GET.length() + 1)); - return fieldName.toString(); - } - - public String getNexPrefix() { - return PREFIX + prefixCount++; - } - - @Override - public int getWeight() { - return JavaBeansDataBinding.HEAVY_WEIGHT; - } - - /** - * Create an element with the given name - * @param qName - * @return - * @throws Java2XMLMapperException - */ - public abstract T createElement(QName qName) throws Java2XMLMapperException; - - /** - * Create a text node and add it to the parent - * @param parentElement - * @param textData - * @throws Java2XMLMapperException - */ - public abstract void appendText(T parentElement, String textData) throws Java2XMLMapperException; - - /** - * Add the child element to the parent - * @param parentElement - * @param childElement - * @throws Java2XMLMapperException - */ - public abstract void appendChild(T parentElement, T childElement) throws Java2XMLMapperException; -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java deleted file mode 100644 index 4981699792..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * 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.databinding.javabeans; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamClass; -import java.io.OutputStream; -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * DataBinding for JavaBeans - * - * @version $Rev$ $Date$ - */ -public class JavaBeansDataBinding extends BaseDataBinding { - private final static Logger logger = Logger.getLogger(JavaBeansDataBinding.class.getName()); - /** - * Defining a weight to a very high number so that the transformer won't be picked - * up by other paths unless it's the only available path - */ - public static final int HEAVY_WEIGHT = 10000; - public static final String NAME = "java:complexType"; - - public JavaBeansDataBinding() { - super(NAME, Object.class); - } - - protected JavaBeansDataBinding(String name, Class<?> baseType) { - super(name, baseType); - } - - @Override - public Object copy(Object arg, DataType dataType, Operation operation) { - if (arg == null) { - return null; - } - final Class<?> clazz = arg.getClass(); - if (String.class == clazz || clazz.isPrimitive() - || Number.class.isAssignableFrom(clazz) - || Boolean.class.isAssignableFrom(clazz) - || Character.class.isAssignableFrom(clazz) - || Byte.class.isAssignableFrom(clazz)) { - // Immutable classes - return arg; - } - try { - if (arg instanceof Serializable) { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream oos = getObjectOutputStream(bos); - oos.writeObject(arg); - oos.close(); - bos.close(); - - // Work out which ClassLoader to use for deserializing arg - // We want to use: - // * The ClassLoader of arg if it is not the System ClassLoader - // * The ThreadContext ClassLoader if the ClassLoader of arg is the System ClassLoader - // because Collection classes are loaded by the System ClassLoader but their contents - // may be loaded from another ClassLoader - // - ClassLoader classLoaderToUse = clazz.getClassLoader(); - if (classLoaderToUse == null) - { - // ClassLoader of arg is the System ClassLoader so we will use the ThreadContext ClassLoader - // instead - classLoaderToUse = Thread.currentThread().getContextClassLoader(); - } - - ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); - ObjectInputStream ois = getObjectInputStream(bis, classLoaderToUse); - Object objectCopy = ois.readObject(); - ois.close(); - bis.close(); - return objectCopy; - } else if (arg instanceof Cloneable) { - Method clone; - try { - clone = arg.getClass().getMethod("clone"); - try { - return clone.invoke(arg, (Object[])null); - } catch (InvocationTargetException e) { - if (e.getTargetException() instanceof CloneNotSupportedException) { - // Ignore - } else { - throw new IllegalArgumentException(e); - } - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } catch (NoSuchMethodException e) { - // Ignore it - } - } - // return arg; - logger.warning("Argument type '" + arg.getClass().getName() - + "' is not Serializable or Cloneable. Pass-by-value is skipped."); - return arg; - } catch (Exception e) { - throw new IllegalArgumentException("Pass-by-value is not supported for the given object: " + arg.getClass() - .getName(), e); - } - } - - protected ObjectOutputStream getObjectOutputStream(OutputStream os) throws IOException { - return new ObjectOutputStream(os); - } - - protected ObjectInputStream getObjectInputStream(InputStream is, final ClassLoader cl) throws IOException { - ObjectInputStream ois = new ObjectInputStream(is) { - @Override - protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { - try { - return Class.forName(desc.getName(), false, cl); - } catch (ClassNotFoundException e) { - try { - // For OSGi, use context ClassLoader if the bundle ClassLoader cannot load the class - if (cl != Thread.currentThread().getContextClassLoader()) { - return Class.forName(desc.getName(), false, Thread.currentThread().getContextClassLoader()); - } - } catch (ClassNotFoundException e1) { - // ignore - } catch (NoClassDefFoundError e1) { - // ignore - } - return super.resolveClass(desc); - } - } - - }; - return ois; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java deleted file mode 100644 index 6886462ac8..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaExceptionDataBinding.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.databinding.javabeans; - - -/** - * DataBinding for Java Exceptions - * - * @version $Rev$ $Date$ - */ -public class JavaExceptionDataBinding extends JavaBeansDataBinding { - - public static final String NAME = "java:exception"; - - public JavaExceptionDataBinding() { - super(NAME, null); - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java deleted file mode 100644 index b8b97d4425..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.databinding.javabeans; - - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.SimpleTypeMapper; -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.databinding.xml.XMLStringDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * DataBinding for Java simple types - * - * @version $Rev$ $Date$ - */ -public class SimpleJavaDataBinding extends BaseDataBinding { - public static final String NAME = "java:simpleType"; - private SimpleTypeMapper simpleTypeMapper = new SimpleTypeMapperImpl(); - - public SimpleJavaDataBinding(ExtensionPointRegistry registry) { - super(NAME, Object.class); -// UtilityExtensionPoint utilityExtensionPoint = registry.getExtensionPoint(UtilityExtensionPoint.class); -// this.simpleTypeMapper = utilityExtensionPoint.getUtility(SimpleTypeMapper.class); - } - - @Override - public Object copy(Object arg, DataType dataType, Operation operation) { - if (arg instanceof byte[]) { - return ((byte[])arg).clone(); - } - return arg; - } - - @Override - public boolean introspect(DataType type, Operation operation) { - Class<?> cls = type.getPhysical(); - if (cls == Object.class) { - return false; - } - // HACK: [rfeng] By pass the one know to XMLString - String db = type.getDataBinding(); - if (db != null && (XMLStringDataBinding.NAME.equals(db))) { - return false; - } - if (SimpleTypeMapperImpl.JAVA2XML.keySet().contains(cls)) { - type.setDataBinding(NAME); - QName elementName = null; - Object logical = type.getLogical(); - if (logical instanceof XMLType) { - elementName = ((XMLType)logical).getElementName(); - } - TypeInfo typeInfo = simpleTypeMapper.getXMLType(cls); - type.setLogical(new XMLType(elementName, typeInfo == null ? null : typeInfo.getQName())); - return true; - } else { - return false; - } - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java deleted file mode 100644 index 6a30605f0f..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * 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.databinding.javabeans; - -import java.lang.reflect.Array; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * Transformer to convert data from XML to JavaBean - * - * @version $Rev$ $Date$ - */ -public abstract class XML2JavaBeanTransformer<T> extends BaseTransformer<T, Object> implements - PullTransformer<T, Object> { - - public static final String SET = "set"; - public static final QName QNAME_MESSAGE = new QName("message"); - - protected SimpleTypeMapperImpl mapper; - - public XML2JavaBeanTransformer() { - this.mapper = new SimpleTypeMapperImpl(); - } - - @Override - public int getWeight() { - return JavaBeansDataBinding.HEAVY_WEIGHT; - } - - public Object transform(T source, TransformationContext context) { - //FIXME why is the logical type sometimes a Class instead of an XMLType? - if (context.getSourceDataType().getLogical() instanceof XMLType) { - XMLType xmlType = (XMLType) context.getSourceDataType().getLogical(); - return toJavaObject(xmlType.getTypeName(), getRootElement(source), context); - } else { - return toJavaObject(null, getRootElement(source), context); - } - } - - public Object toJavaObject(QName xmlType, T xmlElement, TransformationContext context) { - if (xmlType != null && mapper.isSimpleXSDType(xmlType)) { - return mapper.toJavaObject(xmlType, getText(xmlElement), context); - } else { - Class<?> javaType = (Class<?>)context.getTargetDataType().getPhysical(); - return createJavaObject(xmlElement, javaType, context); - } - } - - @SuppressWarnings("unchecked") - private <L> L createJavaObject(T element, Class<L> javaType, TransformationContext context) - throws XML2JavaMapperException { - if (isTextOnly(element)) { - return (L) mapper.toJavaObject(mapper.getXMLType(javaType).getQName(), - getText(element), - context); - } else { - String fieldName = null; - try { - L javaInstance; - T detailMsg = null; - if (Throwable.class.isAssignableFrom(javaType)) { - T msgElement = getFirstChildWithName(element, QNAME_MESSAGE); - if (msgElement != null && isTextOnly(msgElement)) { - detailMsg = msgElement; // skip this when handling child elements - Constructor constructor = javaType.getConstructor(new Class[] {String.class}); - javaInstance = (L)constructor.newInstance(new Object[] {getText(detailMsg)}); - } else { - javaInstance = javaType.newInstance(); - } - } else { - javaInstance = javaType.newInstance(); - } - Map<Field, List<Object>> arrayFields = new Hashtable<Field, List<Object>>(); - Map<Method, List<Object>> arraySetters = new Hashtable<Method, List<Object>>(); - - for (Iterator<T> childElements = getChildElements(element); childElements.hasNext(); ) { - T childElement = childElements.next(); - if (!isTextElement(childElement) && childElement != detailMsg) { - fieldName = getElementName(childElement); - try { - Field javaField = javaType.getField(fieldName); - setFieldValue(javaInstance, - javaField, - childElement, - arrayFields, - context); - - } catch (NoSuchFieldException e1) { - setFieldValueUsingSetter(javaType, - javaInstance, - fieldName, - childElement, - arraySetters, - context); - } - } - } - - setArrayValues(javaInstance, arrayFields, arraySetters); - return javaInstance; - } catch (Exception e2) { - XML2JavaMapperException xml2JavaEx = new XML2JavaMapperException(e2); - xml2JavaEx.setJavaType(javaType); - xml2JavaEx.setJavaFieldName(fieldName); - throw xml2JavaEx; - } - } - } - - private void setFieldValue(Object javaInstance, - Field javaField, - T fieldValue, - Map<Field, List<Object>> arrayFields, - TransformationContext context) throws IllegalAccessException { - Class<?> javaFieldType = (Class<?>) javaField.getType(); - - if (javaFieldType.isArray()) { - Class<?> componentType = javaFieldType.getComponentType(); - List<Object> fldValueArray = arrayFields.get(javaField); - if (fldValueArray == null) { - fldValueArray = new ArrayList<Object>(); - arrayFields.put(javaField, fldValueArray); - } - fldValueArray.add(createJavaObject(fieldValue, componentType, context)); - } else { - javaField.setAccessible(true); - javaField.set(javaInstance, createJavaObject(fieldValue, javaFieldType, context)); - } - } - - private void setFieldValueUsingSetter(Class javaType, - Object javaInstance, - String fieldName, - T fieldValue, - Map<Method, List<Object>> arraySetters, - TransformationContext context) throws IllegalAccessException, - InvocationTargetException { - char firstChar = Character.toUpperCase(fieldName.charAt(0)); - StringBuilder methodName = new StringBuilder(SET + fieldName); - methodName.setCharAt(SET.length(), firstChar); - boolean methodNotFound = true; - - for (int methodCount = 0; methodNotFound && methodCount < javaType.getMethods().length; ++methodCount) { - Method aMethod = javaType.getMethods()[methodCount]; - if (aMethod.getName().equals(methodName.toString()) - && aMethod.getParameterTypes().length == 1) { - Class<?> paramType = aMethod.getParameterTypes()[0]; - - if (paramType.isArray()) { - Class<?> componentType = paramType.getComponentType(); - List<Object> setterValueArray = arraySetters.get(aMethod); - if (setterValueArray == null) { - setterValueArray = new ArrayList<Object>(); - arraySetters.put(aMethod, setterValueArray); - } - setterValueArray.add(createJavaObject(fieldValue, componentType, context)); - } else { - aMethod.invoke(javaInstance, new Object[] {createJavaObject(fieldValue, - paramType, - context)}); - } - methodNotFound = false; - } - } - - if (methodNotFound) { - XML2JavaMapperException xml2JavaEx = - new XML2JavaMapperException("No field or setter method to configure xml data"); - xml2JavaEx.setJavaFieldName(fieldName); - xml2JavaEx.setJavaType(javaType); - throw xml2JavaEx; - } - } - - private void setArrayValues(Object javaInstance, - Map<Field, List<Object>> arrayFields, - Map<Method, List<Object>> arraySetters) throws IllegalAccessException, - InvocationTargetException { - if (arrayFields.size() > 0) { - for (Field javaField : arrayFields.keySet()) { - javaField.setAccessible(true); - - if (javaField.getType().getComponentType().isPrimitive()) { - javaField.set(javaInstance, createPrimitiveArray(javaField.getType() - .getComponentType(), - arrayFields.get(javaField))); - } else { - javaField.set(javaInstance, - createNonPrimitiveArray(javaField.getType().getComponentType(), - arrayFields.get(javaField))); - } - } - } - - if (arraySetters.size() > 0) { - for (Method aMethod : arraySetters.keySet()) { - Class<?> paramType = aMethod.getParameterTypes()[0]; - if (paramType.getComponentType().isPrimitive()) { - aMethod.invoke(javaInstance, - new Object[] {createPrimitiveArray(paramType.getComponentType(), - arraySetters.get(aMethod))}); - } else { - aMethod.invoke(javaInstance, - new Object[] {createNonPrimitiveArray(paramType.getComponentType(), - arraySetters.get(aMethod))}); - } - } - } - } - - private Object createNonPrimitiveArray(Class fieldType, List values) { - Object objectArray = Array.newInstance(fieldType, values.size()); - for (int count = 0; count < values.size(); ++count) { - Array.set(objectArray, count, values.get(count)); - } - return objectArray; - } - - private Object createPrimitiveArray(Class fieldType, List values) { - if (fieldType.isPrimitive()) { - if (fieldType.getName().equals("int")) { - int[] primitiveValues = new int[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Integer) values.get(count)).intValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("float")) { - float[] primitiveValues = new float[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Float) values.get(count)).floatValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("boolean")) { - boolean[] primitiveValues = new boolean[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Boolean) values.get(count)).booleanValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("char")) { - char[] primitiveValues = new char[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Character) values.get(count)).charValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("byte")) { - byte[] primitiveValues = new byte[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Byte) values.get(count)).byteValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("short")) { - short[] primitiveValues = new short[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Short) values.get(count)).shortValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("long")) { - long[] primitiveValues = new long[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Long) values.get(count)).longValue(); - } - return primitiveValues; - } else if (fieldType.getName().equals("double")) { - double[] primitiveValues = new double[values.size()]; - for (int count = 0; count < values.size(); ++count) { - primitiveValues[count] = ((Double) values.get(count)).doubleValue(); - } - return primitiveValues; - } - } - return values; - } - - public abstract String getText(T source) throws XML2JavaMapperException; - - public abstract Iterator<T> getChildElements(T parent) throws XML2JavaMapperException; - - public abstract String getElementName(T element) throws XML2JavaMapperException; - - public abstract boolean isTextElement(T element) throws XML2JavaMapperException; - - public abstract boolean isTextOnly(T element) throws XML2JavaMapperException; - - public abstract T getFirstChildWithName(T element, QName name) throws XML2JavaMapperException; - - public abstract T getRootElement(T element) throws XML2JavaMapperException; - - @Override - public Class<Object> getTargetType() { - return Object.class; - } - - @Override - public String getTargetDataBinding() { - return JavaBeansDataBinding.NAME; - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java deleted file mode 100644 index ae06d68e67..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaMapperException.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.databinding.javabeans; - -import javax.xml.namespace.QName; - -/** - * This exception is used to encapsulate and rethrow exceptions that arise out - * of converting XML Data to Java Objects. - * - * @version $Rev$ $Date$ - */ -public class XML2JavaMapperException extends RuntimeException { - private static final long serialVersionUID = 6596530102591630642L; - - private QName xmlElementName; - private String javaFieldName; - private Class javaType; - - public XML2JavaMapperException(String message) { - super(message); - } - - public XML2JavaMapperException(Throwable cause) { - super(cause); - } - - public QName getXmlElementName() { - return xmlElementName; - } - - public void setXmlElementName(QName xmlElementName) { - this.xmlElementName = xmlElementName; - } - - public String getJavaFieldName() { - return javaFieldName; - } - - public void setJavaFieldName(String javaFieldName) { - this.javaFieldName = javaFieldName; - } - - public Class getJavaType() { - return javaType; - } - - public void setJavaType(Class javaType) { - this.javaType = javaType; - } - - @Override - public String getMessage() { - return super.getMessage() + " <" + getJavaFieldName() + "> " + " in <" + getJavaType() + ">"; - } - - - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/util/DataTypeHelper.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/util/DataTypeHelper.java deleted file mode 100644 index 847fcf226c..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/util/DataTypeHelper.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * 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.databinding.util; - -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.lang.reflect.WildcardType; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; - -/** - * - * @version $Rev$ $Date$ - */ -public final class DataTypeHelper { - private DataTypeHelper() { - } - - /** - * Find all classes referenced by this data type though java generics - * @param d - * @return - */ - public static Set<Class<?>> findClasses(DataType d) { - Set<Class<?>> classes = new HashSet<Class<?>>(); - Set<Type> visited = new HashSet<Type>(); - findClasses(d, classes, visited); - return classes; - } - - private static void findClasses(DataType d, Set<Class<?>> classes, Set<Type> visited) { - if (d == null) { - return; - } - classes.add(d.getPhysical()); - if (d.getPhysical() != d.getGenericType()) { - findClasses(d.getGenericType(), classes, visited); - } - } - - /** - * Find referenced classes in the generic type - * @param type - * @param classSet - * @param visited - */ - private static void findClasses(Type type, Set<Class<?>> classSet, Set<Type> visited) { - if (visited.contains(type) || type == null) { - return; - } - visited.add(type); - if (type instanceof Class) { - Class<?> cls = (Class<?>)type; - if (!cls.isInterface()) { - classSet.add(cls); - } - return; - } else if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)type; - findClasses(pType.getRawType(), classSet, visited); - for (Type t : pType.getActualTypeArguments()) { - findClasses(t, classSet, visited); - } - } else if (type instanceof TypeVariable) { - TypeVariable<?> tv = (TypeVariable<?>)type; - for (Type t : tv.getBounds()) { - findClasses(t, classSet, visited); - } - } else if (type instanceof GenericArrayType) { - GenericArrayType gType = (GenericArrayType)type; - findClasses(gType, classSet, visited); - } else if (type instanceof WildcardType) { - WildcardType wType = (WildcardType)type; - for (Type t : wType.getLowerBounds()) { - findClasses(t, classSet, visited); - } - for (Type t : wType.getUpperBounds()) { - findClasses(t, classSet, visited); - } - } - } - - /** - * Get all the data types in the interface - * @param intf The interface - * @param useWrapper Use wrapper classes? - * @return A list of DataTypes - */ - public static List<DataType> getDataTypes(Interface intf, boolean useWrapper) { - List<DataType> dataTypes = new ArrayList<DataType>(); - for (Operation op : intf.getOperations()) { - getDataTypes(dataTypes, op, useWrapper); - } - return dataTypes; - } - - /** - * Get all the data types in the operation - * @param op The operation - * @param useWrapper Use wrapper classes? - * @return A list of DataTypes - */ - public static List<DataType> getDataTypes(Operation op, boolean useWrapper) { - List<DataType> dataTypes = new ArrayList<DataType>(); - getDataTypes(dataTypes, op, useWrapper); - return dataTypes; - } - - private static void getDataTypes(List<DataType> dataTypes, Operation op, boolean useWrapper) { - WrapperInfo wrapper = op.getWrapper(); - if (useWrapper && wrapper != null) { - DataType dt1 = wrapper.getInputWrapperType(); - if (dt1 != null) { - dataTypes.add(dt1); - } - DataType dt2 = wrapper.getOutputWrapperType(); - if (dt2 != null) { - dataTypes.add(dt2); - } - } - // FIXME: [rfeng] We may need to find the referenced classes in the child types - // else - { - for (DataType dt1 : op.getInputType().getLogical()) { - dataTypes.add(dt1); - } - DataType dt2 = op.getOutputType(); - if (dt2 != null) { - dataTypes.add(dt2); - } - } - for (DataType<DataType> dt3 : op.getFaultTypes()) { - DataType dt4 = dt3.getLogical(); - if (dt4 != null) { - dataTypes.add(dt4); - } - } - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/util/LRUCache.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/util/LRUCache.java deleted file mode 100644 index 34a82fd2d3..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/util/LRUCache.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.databinding.util; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * A Simple LRU Cache - * - * @version $Revision$ - * @param <K> - * @param <V> - */ - -public class LRUCache<K, V> extends LinkedHashMap<K, V> { - private static final long serialVersionUID = -342098639681884413L; - protected int maxCacheSize = 4096; - - /** - * Default constructor for an LRU Cache The default capacity is 10000 - */ - public LRUCache() { - this(0, 4096, 0.75f, true); - } - - /** - * Constructs a LRUCache with a maximum capacity - * - * @param maximumCacheSize - */ - public LRUCache(int maximumCacheSize) { - this(0, maximumCacheSize, 0.75f, true); - } - - /** - * Constructs an empty <tt>LRUCache</tt> instance with the specified - * initial capacity, maximumCacheSize,load factor and ordering mode. - * - * @param initialCapacity the initial capacity. - * @param maximumCacheSize - * @param loadFactor the load factor. - * @param accessOrder the ordering mode - <tt>true</tt> for access-order, - * <tt>false</tt> for insertion-order. - * @throws IllegalArgumentException if the initial capacity is negative or - * the load factor is non-positive. - */ - - public LRUCache(int initialCapacity, int maximumCacheSize, float loadFactor, boolean accessOrder) { - super(initialCapacity, loadFactor, accessOrder); - this.maxCacheSize = maximumCacheSize; - } - - /** - * @return Returns the maxCacheSize. - */ - public int getMaxCacheSize() { - return maxCacheSize; - } - - /** - * @param maxCacheSize The maxCacheSize to set. - */ - public void setMaxCacheSize(int maxCacheSize) { - this.maxCacheSize = maxCacheSize; - } - - @Override - protected boolean removeEldestEntry(Map.Entry<K, V> eldest) { - return size() > maxCacheSize; - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java deleted file mode 100644 index ed59911a0b..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java +++ /dev/null @@ -1,300 +0,0 @@ -/* - * 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.databinding.xml; - -import java.beans.BeanInfo; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.common.xml.stax.reader.SimpleXmlNodeImpl; -import org.apache.tuscany.sca.common.xml.stax.reader.XmlNode; -import org.apache.tuscany.sca.common.xml.stax.reader.XmlTreeStreamReaderImpl; -import org.apache.tuscany.sca.databinding.SimpleTypeMapper; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; - -/** - * @version $Rev$ $Date$ - */ -public class BeanXMLStreamReaderImpl extends XmlTreeStreamReaderImpl { - private static final Comparator<Accessor> COMPARATOR = new Comparator<Accessor>() { - public int compare(Accessor o1, Accessor o2) { - return o1.getName().compareTo(o2.getName()); - } - }; - - public static class BeanXmlNodeImpl extends SimpleXmlNodeImpl implements XmlNode { - private static final Object[] NULL = null; - private static final SimpleTypeMapper MAPPER = new SimpleTypeMapperImpl(); - - public BeanXmlNodeImpl(Object bean) { - super(getName(bean == null ? null : bean.getClass()), bean); - } - - public BeanXmlNodeImpl(QName name, Object bean) { - super(name, bean); - } - - private static boolean isSimpleType(Class<?> javaType) { - return MAPPER.getXMLType(javaType) != null; - } - - private static String getStringValue(Object o) { - if (o == null) { - return null; - } - TypeInfo info = MAPPER.getXMLType(o.getClass()); - if (info != null) { - return MAPPER.toXMLLiteral(info.getQName(), o, null); - } else { - return String.valueOf(o); - } - } - - @Override - public Iterator<XmlNode> children() { - if (name == null) { - return null; - } - if (value == null) { - return super.children(); - } - if (isSimpleType(value.getClass())) { - XmlNode textNode = new BeanXmlNodeImpl(null, value); - return Arrays.asList(textNode).iterator(); - } - if (Map.class.isAssignableFrom(value.getClass())) { - List<XmlNode> entries = new ArrayList<XmlNode>(); - QName entryName = new QName(name.getNamespaceURI(), "entry"); - Map map = (Map)value; - if (map != null) { - for (Object e : map.entrySet()) { - Map.Entry entry = (Map.Entry)e; - entries.add(new BeanXmlNodeImpl(entryName, entry)); - } - } - return entries.iterator(); - } - try { - Map<String, Accessor> accessorMap = getAccessors(value); - List<Accessor> accessorList = new ArrayList<Accessor>(accessorMap.values()); - Collections.sort(accessorList, COMPARATOR); - - List<XmlNode> props = new ArrayList<XmlNode>(); - for (Accessor accessor : accessorList) { - Class<?> pType = accessor.getType(); - - QName pName = new QName(name.getNamespaceURI(), accessor.getName()); - Object pValue = accessor.getValue(); - if (pType.isArray()) { - if (pValue != null) { - int i1 = Array.getLength(pValue); - for (int j = 0; j < i1; j++) { - Object o = Array.get(pValue, j); - props.add(new BeanXmlNodeImpl(pName, o)); - } - } else { - // TODO: How to handle null? - } - } else if (Collection.class.isAssignableFrom(pType)) { - Collection objList = (Collection)pValue; - if (objList != null && objList.size() > 0) { - for (Iterator j = objList.iterator(); j.hasNext();) { - Object o = j.next(); - props.add(new BeanXmlNodeImpl(pName, o)); - } - - } else { - // How to handle null - } - } else { - props.add(new BeanXmlNodeImpl(pName, pValue)); - } - } - return props.iterator(); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } - - @Override - public QName getName() { - return name; - } - - @Override - public String getValue() { - return getStringValue(value); - } - - private static String getPackageName(Class<?> cls) { - String name = cls.getName(); - int index = name.lastIndexOf('.'); - return index == -1 ? "" : name.substring(0, index); - } - - public static QName getName(Class<?> cls) { - if (cls == null) { - return null; - } - - String packageName = getPackageName(cls); - - if ("".equals(packageName)) { - return new QName("", cls.getSimpleName()); - } - StringBuffer ns = new StringBuffer("http://"); - String[] names = packageName.split("\\."); - for (int i = names.length - 1; i >= 0; i--) { - ns.append(names[i]); - if (i != 0) { - ns.append('.'); - } - } - ns.append('/'); - return new QName(ns.toString(), cls.getSimpleName()); - } - - } - - public BeanXMLStreamReaderImpl(QName name, Object bean) { - super(getXmlNode(name, bean)); - } - - private static BeanXmlNodeImpl getXmlNode(QName name, Object bean) { - BeanXmlNodeImpl root = null; - if (name != null) { - root = new BeanXmlNodeImpl(name, bean); - } else { - root = new BeanXmlNodeImpl(bean); - } - return root; - } - - public static interface Accessor { - String getName(); - - Class<?> getType(); - - Object getValue() throws Exception; - - void setValue(Object value) throws Exception; - } - - private static class FieldAccessor implements Accessor { - private Object target; - private Field field; - - public FieldAccessor(Object target, Field field) { - super(); - this.target = target; - this.field = field; - this.field.setAccessible(true); - } - - public String getName() { - return field.getName(); - } - - public Object getValue() throws Exception { - return field.get(target); - } - - public void setValue(Object value) throws Exception { - field.set(target, value); - } - - public Class<?> getType() { - return field.getType(); - } - - } - - private static class PropertyAccessor implements Accessor { - private Object target; - private PropertyDescriptor prop; - - public PropertyAccessor(Object target, PropertyDescriptor prop) { - super(); - this.target = target; - this.prop = prop; - } - - public String getName() { - return prop.getName(); - } - - public Class<?> getType() { - return prop.getPropertyType(); - } - - public Object getValue() throws Exception { - Method getter = prop.getReadMethod(); - if (getter != null) { - getter.setAccessible(true); - return getter.invoke(target); - } - throw new IllegalAccessException("The property cannot be read: " + getName()); - } - - public void setValue(Object value) throws Exception { - Method setter = prop.getWriteMethod(); - if (setter != null) { - setter.setAccessible(true); - setter.invoke(target); - } - throw new IllegalAccessException("The property cannot be written: " + getName()); - } - - } - - private static Map<String, Accessor> getAccessors(Object target) throws Exception { - if (target == null) { - return Collections.emptyMap(); - } - Map<String, Accessor> map = new HashMap<String, Accessor>(); - Class<?> type = target.getClass(); - for (Field f : type.getFields()) { - map.put(f.getName(), new FieldAccessor(target, f)); - } - BeanInfo info = Introspector.getBeanInfo(type, Object.class); - for (PropertyDescriptor p : info.getPropertyDescriptors()) { - // if (p.getReadMethod() != null && p.getWriteMethod() != null) { - map.put(p.getName(), new PropertyAccessor(target, p)); - // } - } - return map; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java deleted file mode 100644 index ed0b5c9923..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * 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.databinding.xml; - - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.WrapperHandler; -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; - -/** - * DOM DataBinding - * - * @version $Rev$ $Date$ - */ -public class DOMDataBinding extends BaseDataBinding { - public static final String NAME = Node.class.getName(); - - public static final String ROOT_NAMESPACE = "http://tuscany.apache.org/xmlns/sca/databinding/dom/1.0"; - public static final QName ROOT_ELEMENT = new QName(ROOT_NAMESPACE, "root"); - - private DOMHelper domHelper; - - public DOMDataBinding(ExtensionPointRegistry registry) { - super(NAME, Node.class); - this.domHelper = DOMHelper.getInstance(registry); - } - - @Override - public WrapperHandler getWrapperHandler() { - return new DOMWrapperHandler(domHelper); - } - - @Override - public Object copy(Object source, DataType dataType, Operation operation) { - if (Node.class.isAssignableFrom(source.getClass())) { - Node nodeSource = (Node)source; - return nodeSource.cloneNode(true); - } - return super.copy(source, dataType, operation); - } - - @Override - public boolean introspect(DataType type, Operation operation) { - if (Node.class.isAssignableFrom(type.getPhysical())) { - if (type.getLogical() == null) { - type.setLogical(new XMLType(ROOT_ELEMENT, null)); - } - type.setDataBinding(NAME); - return true; - } - return false; - } - - /** - * @param context - * @param element - */ - public static Element adjustElementName(TransformationContext context, Element element) { - if (context != null) { - DataType dataType = context.getTargetDataType(); - Object logical = dataType == null ? null : dataType.getLogical(); - if (!(logical instanceof XMLType)) { - return element; - } - XMLType xmlType = (XMLType)logical; - QName name = new QName(element.getNamespaceURI(), element.getLocalName()); - if (xmlType.isElement() && !xmlType.getElementName().equals(name)) { - QName newName = xmlType.getElementName(); - String prefix = newName.getPrefix(); - String qname = newName.getLocalPart(); - if (prefix != null && !prefix.equals("")) { - qname = prefix + ":" + qname; - } - Document doc = element.getOwnerDocument(); - Element newElement = doc.createElementNS(newName.getNamespaceURI(), qname); - // Copy the attributes to the new element - NamedNodeMap attrs = element.getAttributes(); - for (int i = 0; i < attrs.getLength(); i++) { - Attr attr = (Attr)doc.importNode(attrs.item(i), true); - newElement.getAttributes().setNamedItem(attr); - } - - // Move all the children - while (element.hasChildNodes()) { - newElement.appendChild(element.getFirstChild()); - } - - // Replace the old node with the new node - if (element.getParentNode() != null) { - element.getParentNode().replaceChild(newElement, element); - } - - return newElement; - } - } - return element; - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java deleted file mode 100644 index 4ce5dc6c69..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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.databinding.xml; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.databinding.WrapperHandler; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.ElementInfo; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class DOMWrapperHandler implements WrapperHandler<Node> { - private DOMHelper domHelper; - - public DOMWrapperHandler(DOMHelper domHelper) { - super(); - this.domHelper = domHelper; - } - - public Node create(Operation operation, boolean input) { - - WrapperInfo wrapperInfo = operation.getWrapper(); - ElementInfo element = input ? wrapperInfo.getInputWrapperElement() : wrapperInfo.getOutputWrapperElement(); - // Class<?> wrapperClass = input ? wrapperInfo.getInputWrapperClass() : wrapperInfo.getOutputWrapperClass(); - Document document = domHelper.newDocument(); - QName name = element.getQName(); - return DOMHelper.createElement(document, name); - } - - public void setChildren(Node wrapper, - Object[] childObjects, - Operation operation, boolean input) { - List<ElementInfo> childElements = input? operation.getWrapper().getInputChildElements(): - operation.getWrapper().getOutputChildElements(); - for (int i = 0; i < childElements.size(); i++) { - setChild(wrapper, i, childElements.get(i), childObjects[i]); - } - - } - public void setChild(Node wrapper, int i, ElementInfo childElement, Object value) { - Node node = (Node)value; - if (node.getNodeType() == Node.DOCUMENT_NODE) { - node = ((Document)node).getDocumentElement(); - } - wrapper.appendChild(wrapper.getOwnerDocument().importNode(node, true)); - } - - public List getChildren(Node wrapper, Operation operation, boolean input) { - assert wrapper != null; - List<ElementInfo> childElements = input? operation.getWrapper().getInputChildElements(): - operation.getWrapper().getOutputChildElements(); - if (wrapper.getNodeType() == Node.DOCUMENT_NODE) { - wrapper = ((Document)wrapper).getDocumentElement(); - } - List<Node> elements = new ArrayList<Node>(); - NodeList nodes = wrapper.getChildNodes(); - for (int j = 0; j < nodes.getLength(); j++) { - Node node = nodes.item(j); - if (node.getNodeType() == Node.ELEMENT_NODE) { - elements.add(node); - } - } - return elements; - } - - /** - * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean) - */ - public DataType getWrapperType(Operation operation, boolean input) { - WrapperInfo wrapper = operation.getWrapper(); - ElementInfo element = input? wrapper.getInputWrapperElement(): wrapper.getOutputWrapperElement(); - DataType<XMLType> wrapperType = - new DataTypeImpl<XMLType>(DOMDataBinding.NAME, Node.class, new XMLType(element)); - return wrapperType; - } - - public boolean isInstance(Object wrapperObj, - Operation operation, - boolean input) { - WrapperInfo wrapperInfo = operation.getWrapper(); - ElementInfo element = input ? wrapperInfo.getInputWrapperElement() : wrapperInfo.getOutputWrapperElement(); - List<ElementInfo> childElements = - input ? wrapperInfo.getInputChildElements() : wrapperInfo.getOutputChildElements(); - Node wrapper = (Node)wrapperObj; - if (wrapper.getNodeType() == Node.DOCUMENT_NODE) { - wrapper = ((Document)wrapper).getDocumentElement(); - } - QName elementName = new QName(wrapper.getNamespaceURI(), wrapper.getLocalName()); - if (!element.getQName().equals(elementName)) { - return false; - } - Set<QName> names = new HashSet<QName>(); - for (ElementInfo e : childElements) { - names.add(e.getQName()); - } - NodeList nodes = wrapper.getChildNodes(); - for (int j = 0; j < nodes.getLength(); j++) { - Node node = nodes.item(j); - if (node.getNodeType() == Node.ELEMENT_NODE) { - elementName = new QName(wrapper.getNamespaceURI(), wrapper.getLocalName()); - if (!names.contains(elementName)) { - return false; - } - } - } - return true; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputSource2Node.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputSource2Node.java deleted file mode 100644 index 5f583da283..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputSource2Node.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.stream.StreamSource; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; -import org.xml.sax.InputSource; - -/** - * Push DOM InputSource to Node - * - * @version $Rev$ $Date$ - */ -public class InputSource2Node extends BaseTransformer<InputSource, Node> implements - PullTransformer<InputSource, Node> { - private static final Source2ResultTransformer TRANSFORMER = new Source2ResultTransformer(); - - public Node transform(InputSource source, TransformationContext context) { - try { - Source streamSource = new StreamSource(source.getCharacterStream()); - DOMResult result = new DOMResult(); - TRANSFORMER.transform(streamSource, result, context); - return result.getNode(); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - public Class<InputSource> getSourceType() { - return InputSource.class; - } - - @Override - public Class<Node> getTargetType() { - return Node.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputSource2SAX.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputSource2SAX.java deleted file mode 100644 index 39116ba4a1..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputSource2SAX.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.databinding.xml; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.xml.sax.ContentHandler; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -/** - * Push InputSource to SAX - * - * @version $Rev$ $Date$ - */ -public class InputSource2SAX extends BaseTransformer<InputSource, ContentHandler> implements - PushTransformer<InputSource, ContentHandler> { - - public void transform(InputSource source, ContentHandler target, TransformationContext context) { - try { - XMLReader reader = XMLReaderFactory.createXMLReader(); - reader.setFeature("http://xml.org/sax/features/namespaces", true); - reader.setFeature("http://xml.org/sax/features/namespace-prefixes", false); - reader.setContentHandler(target); - reader.parse(source); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - public Class<InputSource> getSourceType() { - return InputSource.class; - } - - @Override - public Class<ContentHandler> getTargetType() { - return ContentHandler.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputStream2Node.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputStream2Node.java deleted file mode 100644 index e40c3006fb..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputStream2Node.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.InputStream; - -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.sax.SAXSource; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; -import org.xml.sax.InputSource; - -/** - * Push DOM InputSource to Node - * - * @version $Rev$ $Date$ - */ -public class InputStream2Node extends BaseTransformer<InputStream, Node> implements - PullTransformer<InputStream, Node> { - private static final Source2ResultTransformer TRANSFORMER = new Source2ResultTransformer(); - - public Node transform(InputStream source, TransformationContext context) { - try { - Source streamSource = new SAXSource(new InputSource(source)); - DOMResult result = new DOMResult(); - TRANSFORMER.transform(streamSource, result, context); - return result.getNode(); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - public Class<InputStream> getSourceType() { - return InputStream.class; - } - - @Override - public Class<Node> getTargetType() { - return Node.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputStream2SAX.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputStream2SAX.java deleted file mode 100644 index 3b7bd3088a..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/InputStream2SAX.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.InputStream; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.xml.sax.ContentHandler; -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -/** - * Push InputStream to SAX - * - * @version $Rev$ $Date$ - */ -public class InputStream2SAX extends BaseTransformer<InputStream, ContentHandler> implements - PushTransformer<InputStream, ContentHandler> { - public void transform(InputStream source, ContentHandler target, TransformationContext context) { - try { - XMLReader reader = XMLReaderFactory.createXMLReader(); - reader.setContentHandler(target); - reader.parse(new InputSource(source)); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - public Class<InputStream> getSourceType() { - return InputStream.class; - } - - @Override - public Class<ContentHandler> getTargetType() { - return ContentHandler.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2OutputStream.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2OutputStream.java deleted file mode 100644 index 5500d0bcca..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2OutputStream.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.OutputStream; - -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -/** - * Push DOM Node to OutputStream - * - * @version $Rev$ $Date$ - */ -public class Node2OutputStream extends BaseTransformer<Node, OutputStream> implements - PushTransformer<Node, OutputStream> { - private static final Source2ResultTransformer TRANSFORMER = new Source2ResultTransformer(); - - public void transform(Node source, OutputStream writer, TransformationContext context) { - try { - Source domSource = new DOMSource(source); - Result result = new StreamResult(writer); - TRANSFORMER.transform(domSource, result, context); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Node> getSourceType() { - return Node.class; - } - - @Override - protected Class<OutputStream> getTargetType() { - return OutputStream.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java deleted file mode 100644 index d5bf7e76b5..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.databinding.xml; - -import org.apache.tuscany.sca.databinding.impl.SimpleType2JavaTransformer; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * Transformer to convert data from a simple java Object to OMElement. - * - * @version $Rev$ $Date$ - */ -public class Node2SimpleJavaType extends SimpleType2JavaTransformer<Node> { - - @Override - protected String getText(Node source) { - if (source instanceof Document) { - source = ((Document)source).getDocumentElement(); - } - return source.getTextContent(); - - } - - @Override - public Class getSourceType() { - return Node.class; - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SourceTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SourceTransformer.java deleted file mode 100644 index 3c9022bc3c..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SourceTransformer.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMSource; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -/** - * Transform TrAX Node to Source - * - * @version $Rev$ $Date$ - */ -public class Node2SourceTransformer extends BaseTransformer<Node, Source> implements - PullTransformer<Node, Source> { - - public Source transform(Node source, TransformationContext context) { - try { - return new DOMSource(source); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Node> getSourceType() { - return Node.class; - } - - @Override - protected Class<Source> getTargetType() { - return Source.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2String.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2String.java deleted file mode 100644 index 1b54b1fd1e..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2String.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.StringWriter; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -/** - * Transform DOM Node to XML String - * - * @version $Rev$ $Date$ - */ -public class Node2String extends BaseTransformer<Node, String> implements PullTransformer<Node, String> { - private static final Node2Writer TRANSFORMER = new Node2Writer(); - - public String transform(Node source, TransformationContext context) { - try { - StringWriter writer = new StringWriter(); - TRANSFORMER.transform(source, writer, context); - return writer.toString(); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - public Class<Node> getSourceType() { - return Node.class; - } - - @Override - public Class<String> getTargetType() { - return String.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2Writer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2Writer.java deleted file mode 100644 index c9631595dc..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2Writer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.Writer; - -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -/** - * Push DOM Node to Writer - * - * @version $Rev$ $Date$ - */ -public class Node2Writer extends BaseTransformer<Node, Writer> implements PushTransformer<Node, Writer> { - private static final Source2ResultTransformer TRANSFORMER = new Source2ResultTransformer(); - - public void transform(Node source, Writer writer, TransformationContext context) { - try { - Source domSource = new DOMSource(source); - Result result = new StreamResult(writer); - TRANSFORMER.transform(domSource, result, context); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Node> getSourceType() { - return Node.class; - } - - @Override - protected Class<Writer> getTargetType() { - return Writer.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java deleted file mode 100644 index 3d89a26cab..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2XMLStreamReader.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.common.xml.stax.reader.DOMXMLStreamReader; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -/** - * Transform DOM Node to XML XMLStreamReader - * - * @version $Rev$ $Date$ - */ -public class Node2XMLStreamReader extends BaseTransformer<Node, XMLStreamReader> implements - PullTransformer<Node, XMLStreamReader> { - - public XMLStreamReader transform(Node source, TransformationContext context) { - if (source == null) { - return null; - } - try { - DOMXMLStreamReader reader = new DOMXMLStreamReader(source); - return reader; - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Node> getSourceType() { - return Node.class; - } - - @Override - protected Class<XMLStreamReader> getTargetType() { - return XMLStreamReader.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Reader2Node.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Reader2Node.java deleted file mode 100644 index 70387fa862..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Reader2Node.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.Reader; - -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.stream.StreamSource; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -/** - * Push DOM Reader to Node - * - * @version $Rev$ $Date$ - */ -public class Reader2Node extends BaseTransformer<Reader, Node> implements PullTransformer<Reader, Node> { - private static final Source2ResultTransformer TRANSFORMER = new Source2ResultTransformer(); - - public Node transform(Reader source, TransformationContext context) { - try { - Source streamSource = new StreamSource(source); - DOMResult result = new DOMResult(); - TRANSFORMER.transform(streamSource, result, context); - return result.getNode(); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Reader> getSourceType() { - return Reader.class; - } - - @Override - protected Class<Node> getTargetType() { - return Node.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Reader2SAX.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Reader2SAX.java deleted file mode 100644 index 188ecaffa3..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Reader2SAX.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.Reader; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.xml.sax.ContentHandler; -import org.xml.sax.InputSource; - -/** - * Transform XML string to SAX - * - * @version $Rev$ $Date$ - */ -public class Reader2SAX extends BaseTransformer<Reader, ContentHandler> implements - PushTransformer<Reader, ContentHandler> { - public void transform(Reader source, ContentHandler target, TransformationContext context) { - try { - new InputSource2SAX().transform(new InputSource(source), target, context); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Reader> getSourceType() { - return Reader.class; - } - - @Override - protected Class<ContentHandler> getTargetType() { - return ContentHandler.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SAX2DOMPipe.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SAX2DOMPipe.java deleted file mode 100644 index b6b3c05462..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SAX2DOMPipe.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.databinding.xml; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.DataPipe; -import org.apache.tuscany.sca.databinding.DataPipeTransformer; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; -import org.xml.sax.ContentHandler; - -public class SAX2DOMPipe extends BaseTransformer<ContentHandler, Node> implements DataPipeTransformer<ContentHandler, Node> { - private DOMHelper domHelper; - /** - * - */ - public SAX2DOMPipe(ExtensionPointRegistry registry) { - super(); - domHelper = DOMHelper.getInstance(registry); - } - - /** - * @see org.apache.tuscany.sca.databinding.DataPipeTransformer#newInstance() - */ - public DataPipe<ContentHandler, Node> newInstance() { - return new Pipe(); - } - - @Override - protected Class<Node> getTargetType() { - return Node.class; - } - - @Override - protected Class<ContentHandler> getSourceType() { - return ContentHandler.class; - } - - @Override - public int getWeight() { - return 30; - } - - private class Pipe implements DataPipe<ContentHandler, Node> { - private DOMHelper.NodeContentHandler pipe; - - public Pipe() { - super(); - this.pipe = domHelper.createContentHandler(null); - } - - public Node getResult() { - return pipe.getNode(); - } - - public ContentHandler getSink() { - return pipe; - } - - } -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java deleted file mode 100644 index 0bb13bb3ea..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.impl.Java2SimpleTypeTransformer; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * Transformer to convert data from an simple OMElement to Java Object - * - * @version $Rev$ $Date$ - */ -public class SimpleJavaType2Node extends Java2SimpleTypeTransformer<Node> { - private DOMHelper helper; - - public SimpleJavaType2Node(ExtensionPointRegistry registry) { - super(); - helper = DOMHelper.getInstance(registry); - } - - @Override - protected Node createElement(QName element, String text, TransformationContext context) { - if (element == null) { - element = DOMDataBinding.ROOT_ELEMENT; - } - Document factory = helper.newDocument(); - Node root = DOMHelper.createElement(factory, element); - if (text != null) { - root.appendChild(factory.createTextNode(text)); - } else { - Attr nil = factory.createAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:nil"); - nil.setValue("true"); - root.appendChild(nil); - } - return root; - } - - @Override - public Class getTargetType() { - return Node.class; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2NodeTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2NodeTransformer.java deleted file mode 100644 index 54b281acb5..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2NodeTransformer.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.transform.Source; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * Transform TrAX Source to Node - * - * @version $Rev$ $Date$ - */ -public class Source2NodeTransformer extends BaseTransformer<Source, Node> implements - PullTransformer<Source, Node> { - private DOMHelper helper; - - public Source2NodeTransformer(ExtensionPointRegistry registry) { - super(); - helper = DOMHelper.getInstance(registry); - } - - public Node transform(Source source, TransformationContext context) { - try { - Document doc = helper.load(source); - return DOMDataBinding.adjustElementName(context, doc.getDocumentElement()); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Source> getSourceType() { - return Source.class; - } - - @Override - protected Class<Node> getTargetType() { - return Node.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2ResultTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2ResultTransformer.java deleted file mode 100644 index 8a2b6b39aa..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2ResultTransformer.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.TransformerFactory; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -/** - * Transform TrAX Source to Result - * - * @version $Rev$ $Date$ - */ -public class Source2ResultTransformer extends BaseTransformer<Source, Result> implements - PushTransformer<Source, Result> { - private static final TransformerFactory FACTORY = TransformerFactory.newInstance(); - - public void transform(Source source, Result result, TransformationContext context) { - try { - javax.xml.transform.Transformer transformer = FACTORY.newTransformer(); - transformer.transform(source, result); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Source> getSourceType() { - return Source.class; - } - - @Override - protected Class<Result> getTargetType() { - return Result.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2StringTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2StringTransformer.java deleted file mode 100644 index 2ed548ad76..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Source2StringTransformer.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.StringWriter; - -import javax.xml.transform.Source; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.stream.StreamResult; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -/** - * Transform TrAX Source to String - * - * @version $Rev$ $Date$ - */ -public class Source2StringTransformer extends BaseTransformer<Source, String> implements - PullTransformer<Source, String> { - private static final TransformerFactory FACTORY = TransformerFactory.newInstance(); - - public String transform(Source source, TransformationContext context) { - try { - javax.xml.transform.Transformer transformer = FACTORY.newTransformer(); - StringWriter sw = new StringWriter(); - StreamResult result = new StreamResult(sw); - transformer.transform(source, result); - return sw.toString(); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<Source> getSourceType() { - return Source.class; - } - - @Override - protected Class<String> getTargetType() { - return String.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StAXDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StAXDataBinding.java deleted file mode 100644 index ed57992910..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StAXDataBinding.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.databinding.xml; - - -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * A DataBinding for the StAX - * - * @version $Rev$ $Date$ - */ -public class StAXDataBinding extends BaseDataBinding { - public static final String NAME = XMLStreamReader.class.getName(); - - public StAXDataBinding() { - super(NAME, XMLStreamReader.class); - } - - @Override - public boolean introspect(DataType type, Operation operation) { - if (super.introspect(type, operation)) { - type.setLogical(XMLType.UNKNOWN); - type.setDataBinding(NAME); - return true; - } else { - return false; - } - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StreamDataPipe.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StreamDataPipe.java deleted file mode 100644 index f8967e35b6..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StreamDataPipe.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.OutputStream; - -import org.apache.tuscany.sca.databinding.DataPipe; -import org.apache.tuscany.sca.databinding.DataPipeTransformer; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -public class StreamDataPipe extends BaseTransformer<OutputStream, InputStream> implements - DataPipeTransformer<OutputStream, InputStream> { - - public DataPipe<OutputStream, InputStream> newInstance() { - return new Pipe(); - } - - @Override - protected Class<InputStream> getTargetType() { - return InputStream.class; - } - - @Override - public int getWeight() { - return 50; - } - - @Override - protected Class<OutputStream> getSourceType() { - return OutputStream.class; - } - - public static class Pipe implements DataPipe<OutputStream, InputStream> { - private ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - - public InputStream getResult() { - return new ByteArrayInputStream(outputStream.toByteArray()); - } - - public OutputStream getSink() { - return outputStream; - } - - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2Node.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2Node.java deleted file mode 100644 index 548342094e..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2Node.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.databinding.xml; - -import org.apache.tuscany.sca.common.xml.dom.DOMHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -public class String2Node extends BaseTransformer<String, Node> implements PullTransformer<String, Node> { - private DOMHelper helper; - - public String2Node(ExtensionPointRegistry registry) { - super(); - helper = DOMHelper.getInstance(registry); - } - - public Node transform(String source, TransformationContext context) { - try { - return helper.load(source); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<String> getSourceType() { - return String.class; - } - - @Override - protected Class<Node> getTargetType() { - return Node.class; - } - - @Override - public int getWeight() { - return 50; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2SAX.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2SAX.java deleted file mode 100644 index c56dba1843..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2SAX.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.StringReader; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.xml.sax.ContentHandler; -import org.xml.sax.InputSource; - -/** - * Transform XML string to SAX - * - * @version $Rev$ $Date$ - */ -public class String2SAX extends BaseTransformer<String, ContentHandler> implements - PushTransformer<String, ContentHandler> { - - public void transform(String source, ContentHandler target, TransformationContext context) { - try { - new InputSource2SAX().transform(new InputSource(new StringReader(source)), target, context); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<String> getSourceType() { - return String.class; - } - - @Override - protected Class<ContentHandler> getTargetType() { - return ContentHandler.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2SourceTransformer.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2SourceTransformer.java deleted file mode 100644 index c2de202a9b..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2SourceTransformer.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.StringReader; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -/** - * Transform XML String to Source - * - * @version $Rev$ $Date$ - */ -public class String2SourceTransformer extends BaseTransformer<String, Source> implements - PullTransformer<String, Source> { - - public Source transform(String source, TransformationContext context) { - try { - return new StreamSource(new StringReader(source)); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<String> getSourceType() { - return String.class; - } - - @Override - protected Class<Source> getTargetType() { - return Source.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2XMLStreamReader.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2XMLStreamReader.java deleted file mode 100644 index ac46bfd3d9..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/String2XMLStreamReader.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.common.xml.stax.StAXHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -public class String2XMLStreamReader extends BaseTransformer<String, XMLStreamReader> implements - PullTransformer<String, XMLStreamReader> { - private StAXHelper helper; - - public String2XMLStreamReader(ExtensionPointRegistry registry) { - helper = StAXHelper.getInstance(registry); - } - - public XMLStreamReader transform(String source, TransformationContext context) { - try { - return helper.createXMLStreamReader(source); - } catch (XMLStreamException e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<String> getSourceType() { - return String.class; - } - - @Override - protected Class<XMLStreamReader> getTargetType() { - return XMLStreamReader.class; - } - - @Override - public int getWeight() { - return 50; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Writer2ReaderDataPipe.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Writer2ReaderDataPipe.java deleted file mode 100644 index 5ab7272d58..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Writer2ReaderDataPipe.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.Reader; -import java.io.StringReader; -import java.io.StringWriter; -import java.io.Writer; - -import org.apache.tuscany.sca.databinding.DataPipe; -import org.apache.tuscany.sca.databinding.DataPipeTransformer; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -public class Writer2ReaderDataPipe extends BaseTransformer<Writer, Reader> implements DataPipeTransformer<Writer, Reader> { - - public DataPipe<Writer, Reader> newInstance() { - return new Pipe(); - } - - @Override - protected Class<Reader> getTargetType() { - return Reader.class; - } - - @Override - public int getWeight() { - return 50; - } - - @Override - protected Class<Writer> getSourceType() { - return Writer.class; - } - - private static class Pipe implements DataPipe<Writer, Reader> { - private StringWriter writer = new StringWriter(); - - public Reader getResult() { - return new StringReader(writer.toString()); - } - - public Writer getSink() { - return writer; - } - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLGroupDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLGroupDataBinding.java deleted file mode 100644 index f7c895db1e..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLGroupDataBinding.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.databinding.xml; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.Reader; -import java.io.Writer; - -import javax.xml.stream.XMLEventReader; -import javax.xml.stream.XMLEventWriter; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; - -import org.apache.tuscany.sca.databinding.impl.GroupDataBinding; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.xml.sax.ContentHandler; -import org.xml.sax.InputSource; - -/** - * A Group DataBinding - * - * @version $Rev$ $Date$ - */ -public class XMLGroupDataBinding extends GroupDataBinding { - - public XMLGroupDataBinding() { - super(new Class[] {InputStream.class, OutputStream.class, Reader.class, Writer.class, - // Source.class, Result.class, - InputSource.class, ContentHandler.class, XMLStreamReader.class, - XMLStreamWriter.class, XMLEventReader.class, XMLEventWriter.class}); - } - - @Override - protected Object getLogical(Class<?> markerType, Operation operation) { - return XMLType.UNKNOWN; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2Node.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2Node.java deleted file mode 100644 index 2ebfcf06e9..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2Node.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.DataPipe; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.xml.sax.ContentHandler; - -/** - * Transform DOM Node to XML XMLStreamReader - * - * @version $Rev$ $Date$ - */ -public class XMLStreamReader2Node extends BaseTransformer<XMLStreamReader, Node> implements - PullTransformer<XMLStreamReader, Node> { - - private XMLStreamReader2SAX stax2sax; - private SAX2DOMPipe sax2domPipe; - - public XMLStreamReader2Node(ExtensionPointRegistry registry) { - stax2sax = new XMLStreamReader2SAX(registry); - sax2domPipe = new SAX2DOMPipe(registry); - } - - public Node transform(XMLStreamReader source, TransformationContext context) { - try { - DataPipe<ContentHandler, Node> pipe = sax2domPipe.newInstance(); - stax2sax.transform(source, pipe.getSink(), context); - Node node = pipe.getResult(); - source.close(); - if (node instanceof Document) { - Document doc = (Document)node; - return DOMDataBinding.adjustElementName(context, doc.getDocumentElement()); - } else { - return node; - } - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<XMLStreamReader> getSourceType() { - return XMLStreamReader.class; - } - - @Override - protected Class<Node> getTargetType() { - return Node.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2SAX.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2SAX.java deleted file mode 100644 index a45c563293..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2SAX.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.common.xml.stax.StAXHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.xml.sax.ContentHandler; - -/** - * XMLStreamReader to SAX events - * - * @version $Rev$ $Date$ - */ -public class XMLStreamReader2SAX extends BaseTransformer<XMLStreamReader, ContentHandler> implements - PushTransformer<XMLStreamReader, ContentHandler> { - - private StAXHelper helper; - - public XMLStreamReader2SAX(ExtensionPointRegistry registry) { - helper = StAXHelper.getInstance(registry); - } - - @Override - protected Class<ContentHandler> getTargetType() { - return ContentHandler.class; - } - - @Override - protected Class<XMLStreamReader> getSourceType() { - return XMLStreamReader.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.PushTransformer#getWeight() - */ - @Override - public int getWeight() { - return 20; - } - - /** - * @see org.apache.tuscany.sca.databinding.PushTransformer#transform(java.lang.Object, - * java.lang.Object, - * org.apache.tuscany.sca.databinding.TransformationContext) - */ - public void transform(XMLStreamReader source, ContentHandler sink, TransformationContext context) { - try { - helper.saveAsSAX(source, sink); - source.close(); - } catch (Exception e) { - throw new TransformationException(e); - } - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2String.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2String.java deleted file mode 100644 index fa06303433..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStreamReader2String.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.databinding.xml; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.common.xml.stax.StAXHelper; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -public class XMLStreamReader2String extends BaseTransformer<XMLStreamReader, String> implements - PullTransformer<XMLStreamReader, String> { - private StAXHelper helper; - - public XMLStreamReader2String(ExtensionPointRegistry registry) { - helper = StAXHelper.getInstance(registry); - } - - public String transform(XMLStreamReader source, TransformationContext context) { - try { - String str = helper.saveAsString(source); - source.close(); - return str; - } catch (XMLStreamException e) { - throw new TransformationException(e); - } - } - - @Override - protected Class<XMLStreamReader> getSourceType() { - return XMLStreamReader.class; - } - - @Override - protected Class<String> getTargetType() { - return String.class; - } - - @Override - public int getWeight() { - return 40; - } - -} diff --git a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStringDataBinding.java b/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStringDataBinding.java deleted file mode 100644 index 22b173dce5..0000000000 --- a/branches/sca-java-2.0-M4/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStringDataBinding.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.databinding.xml; - - -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * A DataBinding for the XML string - * - * @version $Rev$ $Date$ - */ -public class XMLStringDataBinding extends BaseDataBinding { - public static final String NAME = String.class.getName(); - - public XMLStringDataBinding() { - super(NAME, String.class); - } - - @Override - public boolean introspect(DataType type, Operation operation) { - if (type.getPhysical() == String.class && NAME.equals(type.getDataBinding())) { - type.setDataBinding(NAME); - type.setLogical(XMLType.UNKNOWN); - return true; - } else { - return false; - } - } -} |