diff options
Diffstat (limited to 'branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca')
8 files changed, 428 insertions, 0 deletions
diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/Job.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/Job.java new file mode 100644 index 0000000000..98ca6c7429 --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/Job.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.databinding.job; + +public interface Job<T, E> { + public T compute(E v); + + public boolean eos(); + + public int getType(); + + public static int NULL_JOB = 0; + public static int REGULAR_JOB = 1; + public static int RESULT_JOB = 2; + // public boolean reusable(); +} diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/Job2OMElement.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/Job2OMElement.java new file mode 100644 index 0000000000..9752815640 --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/Job2OMElement.java @@ -0,0 +1,84 @@ +/* + * 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.job; + +import java.io.ByteArrayOutputStream; +import java.io.Externalizable; +import java.io.ObjectOutputStream; + +import javax.activation.DataHandler; +import javax.xml.namespace.QName; + +import org.apache.axiom.attachments.ByteArrayDataSource; +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axiom.om.OMText; +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.impl.XSDDataTypeConverter.Base64Binary; +import org.apache.tuscany.sca.databinding.axiom.AxiomHelper; + +@SuppressWarnings("unchecked") +public class Job2OMElement extends BaseTransformer<Job, OMElement> implements + PullTransformer<Job, OMElement> { + + @Override + protected Class getSourceType() { + return Job.class; + } + + @Override + protected Class getTargetType() { + return OMElement.class; + } + + public OMElement transform(Job source, TransformationContext context) { + OMElement element = null; + + try { + // JobDataSource dataSource = new JobDataSource(); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(bos); + out.writeObject(source); + out.close(); + byte[] bytes = bos.toByteArray(); + // ByteArrayDataSource ds = new ByteArrayDataSource(bytes); + OMFactory factory = OMAbstractFactory.getOMFactory(); + OMNamespace ns = AxiomHelper.createOMNamespace(factory, new QName( + "http://job")); + element = factory.createOMElement("jobreference", ns); + // OMText data = factory.createOMText(new DataHandler(ds), true); + // element.addChild(data); + element.setText(Base64Binary.encode(bytes)); + return element; + } catch (Exception e) { + throw new TransformationException(e); + } + } + + @Override + public int getWeight() { + return 10; + } + +} diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataBinding.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataBinding.java new file mode 100644 index 0000000000..0acea89ebf --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataBinding.java @@ -0,0 +1,36 @@ +/* + * 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.job; + +import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; + +/** + * DataBinding for Jobs + */ +public class JobDataBinding extends BaseDataBinding { + + public static final String NAME = Job.class.getName(); + public static final String[] ALIASES = new String[] {"job"}; + + public JobDataBinding() { + super(NAME, ALIASES, Job.class); + } + +} diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataMap.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataMap.java new file mode 100644 index 0000000000..40ee2ff010 --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataMap.java @@ -0,0 +1,70 @@ +/* + * 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.job; + +import java.util.HashMap; + +public class JobDataMap implements java.io.Serializable { + private static final long serialVersionUID = -2602843967597362950L; + private HashMap<String, Object> data = new HashMap<String, Object>(); + + public JobDataMap() { + super(); + } + + public <T> void addJobData(String name, T t) { + data.put(name, t); + } + + public Object getJobDataObject(String name) { + if (data.containsKey(name)) { + return data.get(name); + } + return null; + } + + public Class<?> getJobDataClass(String name) { + if (data.containsKey(name)) { + return data.get(name).getClass(); + } + return null; + } + + public Class<?>[] getJobDataClasses() { + int siz = data.keySet().size(); + int i = 0; + Class<?>[] claz = new Class<?>[siz]; + for (Object e : data.values()) { + claz[i] = e.getClass(); + ++i; + } + return claz; + } + + public Object[] getJobDataObjects() { + int siz = data.keySet().size(); + Object[] objs = new Object[siz]; + int i = 0; + for (Object e : data.values()) { + objs[i] = e.getClass(); + ++i; + } + return objs; + } +} diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataSource.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataSource.java new file mode 100644 index 0000000000..623be7e2b5 --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobDataSource.java @@ -0,0 +1,53 @@ +/* + * 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.job; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class JobDataSource implements javax.activation.DataSource { + private ByteArrayOutputStream os; + + public JobDataSource() { + os = new ByteArrayOutputStream(); + } + + public String getContentType() { + return "application/octet-stream"; + } + + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(os.toByteArray()); + } + + public String getName() { + return "jobreference"; + } + + public byte[] getBytes() { + return os.toByteArray(); + } + + public OutputStream getOutputStream() throws IOException { + return os; + } +}
\ No newline at end of file diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobExecutionContext.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobExecutionContext.java new file mode 100644 index 0000000000..8c98fd2e26 --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/JobExecutionContext.java @@ -0,0 +1,45 @@ +/* + * 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.job; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver; + +public class JobExecutionContext implements java.io.Serializable { + private JobDataMap jobData; + + public JobDataMap getJobData() { + return jobData; + } + + public void storeJSONData(String jsonData) { + XStream xstream = new XStream(new JsonHierarchicalStreamDriver()); + jobData = (JobDataMap) xstream.fromXML(jsonData); + } + + public String getJSONData() { + XStream xstream = new XStream(new JsonHierarchicalStreamDriver()); + String jsonData = xstream.toXML(jobData); + return jsonData; + } + + public void setJobData(JobDataMap jdm) { + this.jobData = jdm; + } +} diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/OMElement2Job.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/OMElement2Job.java new file mode 100644 index 0000000000..057da6b67f --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/OMElement2Job.java @@ -0,0 +1,73 @@ +/* + * 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.job; + +import java.io.ByteArrayInputStream; +import java.io.ObjectInputStream; + +import org.apache.axiom.om.OMElement; +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.impl.XSDDataTypeConverter.Base64Binary; + +/** + * Transformer to convert data from an OMElement to Job + */ +@SuppressWarnings("unchecked") +public class OMElement2Job extends BaseTransformer<OMElement, Job> implements + PullTransformer<OMElement, Job> { + + public Job transform(OMElement source, TransformationContext context) { + try { + + // OMText binaryNode = (OMText) source.getFirstOMChild(); + // DataHandler actualDH = (DataHandler) binaryNode.getDataHandler(); + // ByteArrayDataSource ds = + // (ByteArrayDataSource)actualDH.getDataSource(); + String value = (String) source.getText(); + ByteArrayInputStream bis = new ByteArrayInputStream(Base64Binary + .decode(value)); + ObjectInputStream ois = new ObjectInputStream(bis); + Object obj = ois.readObject(); + ois.close(); + Job aReference = (Job) obj; + return aReference; + } catch (Exception e) { + throw new TransformationException(e); + } + } + + @Override + public Class getSourceType() { + return OMElement.class; + } + + @Override + public Class getTargetType() { + return Job.class; + } + + @Override + public int getWeight() { + return 10; + } + +} diff --git a/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/RemoteJob.java b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/RemoteJob.java new file mode 100644 index 0000000000..693e0f1af7 --- /dev/null +++ b/branches/sca-android/modules/databinding-job/src/main/java/org/apache/tuscany/sca/databinding/job/RemoteJob.java @@ -0,0 +1,35 @@ +/* + * 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.job; + +/** + * This an abstract class to represent a Job with a Context + * + */ +public abstract class RemoteJob<T> implements Job<T, JobExecutionContext>, + java.io.Serializable { + protected JobExecutionContext context = new JobExecutionContext(); + + public abstract T compute(JobExecutionContext v); + + public JobExecutionContext getContext() { + return context; + } + +} |