diff options
Diffstat (limited to '')
6 files changed, 289 insertions, 0 deletions
diff --git a/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/InputStream2Protobuf.java b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/InputStream2Protobuf.java new file mode 100644 index 0000000000..7953e4e5b3 --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/InputStream2Protobuf.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.databinding.protobuf; + +import java.io.InputStream; +import java.lang.reflect.Method; + +import org.apache.tuscany.sca.databinding.PullTransformer; +import org.apache.tuscany.sca.databinding.TransformationContext; +import org.apache.tuscany.sca.databinding.TransformationException; + +import com.google.protobuf.Message; + +/** + * + */ +public class InputStream2Protobuf implements PullTransformer<InputStream, Message> { + + @Override + public String getSourceDataBinding() { + return "application/x-protobuf" + "#" + InputStream.class.getName(); + } + + @Override + public String getTargetDataBinding() { + // TODO Auto-generated method stub + return ProtobufDatabinding.NAME; + } + + @Override + public int getWeight() { + // TODO Auto-generated method stub + return 10; + } + + @Override + public Message transform(InputStream source, TransformationContext context) { + try { + Class<?> type = context.getTargetDataType().getPhysical(); + Method method = type.getMethod("parseFrom", InputStream.class); + Object result = method.invoke(null, source); + return (Message)result; + } catch (Throwable e) { + throw new TransformationException(e); + } + } + +} diff --git a/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/Protobuf2OutputStream.java b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/Protobuf2OutputStream.java new file mode 100644 index 0000000000..6892287f67 --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/Protobuf2OutputStream.java @@ -0,0 +1,60 @@ +/* + * 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.protobuf; + +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.tuscany.sca.databinding.PushTransformer; +import org.apache.tuscany.sca.databinding.TransformationContext; +import org.apache.tuscany.sca.databinding.TransformationException; + +import com.google.protobuf.Message; + +/** + * + */ +public class Protobuf2OutputStream implements PushTransformer<Message, OutputStream> { + @Override + public String getSourceDataBinding() { + return ProtobufDatabinding.NAME; + } + + @Override + public String getTargetDataBinding() { + return "application/x-protobuf" + "#" + OutputStream.class.getName(); + } + + @Override + public int getWeight() { + return 10; + } + + @Override + public void transform(Message source, OutputStream sink, TransformationContext context) { + try { + if (source != null) { + source.writeTo(sink); + } + } catch (IOException e) { + throw new TransformationException(e); + } + } +} diff --git a/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/ProtobufDatabinding.java b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/ProtobufDatabinding.java new file mode 100644 index 0000000000..ad148c7499 --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/java/org/apache/tuscany/sca/databinding/protobuf/ProtobufDatabinding.java @@ -0,0 +1,107 @@ +/* + * 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.protobuf; + +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 com.google.protobuf.Message; + +/** + * Google ProtocolBuffers databinding + */ +public class ProtobufDatabinding implements DataBinding { + + public static final String NAME = "ProtocolBuffers"; + + /** + * + */ + public ProtobufDatabinding() { + } + + /* (non-Javadoc) + * @see org.apache.tuscany.sca.databinding.DataBinding#getName() + */ + @Override + public String getName() { + return NAME; + } + + /* (non-Javadoc) + * @see org.apache.tuscany.sca.databinding.DataBinding#introspect(org.apache.tuscany.sca.interfacedef.DataType, org.apache.tuscany.sca.interfacedef.Operation) + */ + @Override + public boolean introspect(DataType dataType, Operation operation) { + if (Message.class.isAssignableFrom(dataType.getPhysical())) { + dataType.setDataBinding(NAME); + return true; + } + return false; + } + + /* (non-Javadoc) + * @see org.apache.tuscany.sca.databinding.DataBinding#introspect(java.lang.Object, org.apache.tuscany.sca.interfacedef.Operation) + */ + @Override + public DataType introspect(Object value, Operation operation) { + if (value instanceof Message) { + DataType dt = new DataTypeImpl(value.getClass(), null); + dt.setDataBinding(NAME); + return dt; + } else { + return null; + } + } + + /* (non-Javadoc) + * @see org.apache.tuscany.sca.databinding.DataBinding#getWrapperHandler() + */ + @Override + public WrapperHandler getWrapperHandler() { + return null; + } + + /* (non-Javadoc) + * @see org.apache.tuscany.sca.databinding.DataBinding#copy(java.lang.Object, org.apache.tuscany.sca.interfacedef.DataType, org.apache.tuscany.sca.interfacedef.DataType, org.apache.tuscany.sca.interfacedef.Operation, org.apache.tuscany.sca.interfacedef.Operation) + */ + @Override + public Object copy(Object object, + DataType sourceDataType, + DataType targetDataType, + Operation sourceOperation, + Operation targetOperation) { + Message msg = (Message)object; + return ((Message.Builder)msg.toBuilder().clone()).build(); + } + + /* (non-Javadoc) + * @see org.apache.tuscany.sca.databinding.DataBinding#getXMLTypeHelper() + */ + @Override + public XMLTypeHelper getXMLTypeHelper() { + return null; + } + +} diff --git a/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding new file mode 100644 index 0000000000..35f7932ff9 --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding @@ -0,0 +1,20 @@ +# 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. + +# implementation classes for the databindings +org.apache.tuscany.sca.databinding.protobuf.ProtobufDatabinding;name=ProtocolBuffers +
diff --git a/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer new file mode 100644 index 0000000000..0f60373c30 --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer @@ -0,0 +1,20 @@ +# 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. + +# Implementation classes for the transformers +org.apache.tuscany.sca.databinding.protobuf.InputStream2Protobuf;source=application/x-protobuf#java.io.InputStream;target=ProtocolBuffers,weight=10,public=true +
diff --git a/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PushTransformer b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PushTransformer new file mode 100644 index 0000000000..cc1989eb7b --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/unreleased/modules/databinding-protobuf/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PushTransformer @@ -0,0 +1,17 @@ +# 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. +org.apache.tuscany.sca.databinding.protobuf.Protobuf2OutputStream;source=ProtocolBuffers;target=application/x-protobuf#java.io.OutputStream,weight=10,public=true |