/**
*
* 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.samples.sdo.specExampleSection;
import commonj.sdo.helper.XMLHelper;
import commonj.sdo.helper.XSDHelper;
import commonj.sdo.helper.EqualityHelper;
import commonj.sdo.DataObject;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
import org.apache.tuscany.samples.sdo.SdoSampleConstants;
/**
* Demonstrates serializing and deserializing a DataObject to disk.
*
* The following sample is from the Apache Tuscany project. It was written to help users
* understand and experiement with SDO. It is based upon example code contained
* within, and is meant for use with, and reference to the SDO Specification. In general this sample attempts to use the
* code and comments contained within the specification, exceptions to this are noted
* in comments.
*
* The following sample is based upon the 'Serializing/Deserializing a DataGraph or DataObject' example from the Examples section of the SDO
* specification.
*
* The DataObject and DataGraph interfaces extend java.io.Serializable, so any DataObject
* or DataGraph be serialized. The following code serializes the company dataObject to a file
* of the user's choosing. The file is not deleted after execution.
*
* Usage:
* This sample can easily be run from within Eclipse as a Java Application if tuscany or
* the sample-sdo project is imported into Eclipse as an existing project.
*
* If executing as a standalone application please do the following:
*
*
* - Include the following jar files on your classpath :
*
* - SDO API and Tuscany Implementation
*
* - sdo-api-{version}.jar - SDO API
*
- tuscany-sdo-impl-{version}.jar - Tuscany SDO implementation
*
*
* - EMF dependencies.
*
* - emf-common-{version}.jar - some common framework utility and base classes
*
- emf-ecore-{version}.jar - the EMF core runtime implementation classes (the Ecore metamodel)
*
- emf-ecore-change-{version}.jar - the EMF change recorder and framework
*
- emf-ecore-xmi-{version}.jar - EMF's default XML (and XMI) serializer and loader
*
- xsd-{version}.jar - the XML Schema model
*
*
*
*
* These jar files can be obtained from directly from Tuscany and EMF projects or from SDO Execution Dependancies
* - Execute:
* java org.apache.tuscany.samples.sdo.specExampleSection.SerializingDesearializingADataObject
*
*
* @author Robbie Minshall
*/
public class SerializingDesearializingADataObject {
/**
* Default fileName to serialize DataObject to
*/
public static final String DEFAULT_FILE_NAME = "temporarySerializedDataObject.xml";
public static void serializeDO(DataObject DataObject, String fileName) throws IOException {
// serialize data object
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(DataObject);
out.close();
}
/**
* Execute this method in order to run the sample.
*
* @param args
*/
public static void main(String[] args) {
System.out.println("***************************************");
System.out.println("SDO Sample AccessingTheContentsOfASequence");
System.out.println("***************************************");
System.out.println("Demonstrates serializing and deserializing a DataObject to disk.");
System.out.println("***************************************");
try {
// define Types using XSDHelper and predefined xsd file
System.out.println("Defining Types using XSD");
XSDHelper.INSTANCE.define(ClassLoader.getSystemResourceAsStream(SdoSampleConstants.COMPANY_XSD), null);
System.out.println("Type definition completed");
// create company DataObject using XMLHelper which is an example of a XML DAS
System.out.println("Creating company DataObject");
DataObject company = XMLHelper.INSTANCE.load(ClassLoader.getSystemResourceAsStream(SdoSampleConstants.COMPANY_DATAOBJECT_XML))
.getRootObject();
// prompt user for a fileName
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please enter file name, enter for default :");
String fileName = in.readLine();
if ( (fileName == null) || (fileName.equals(""))){
fileName = DEFAULT_FILE_NAME;
}
// serialize dataObject out
System.out.println("Serializing DataObject to " + fileName);
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(company);
out.close();
// read in DataObject
System.out.println("Deserialize DataObject from file");
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream input = new ObjectInputStream(fis);
DataObject newDataObject = (DataObject) input.readObject();
input.close();
/**
* Compare DataObjects
*/
System.out.println("Comparing original and deserialized DataObject");
//determine if two graphs of DataObjects are equal
System.out.println("DataObjects are equal: " + EqualityHelper.INSTANCE.equal(company, newDataObject));
//determine if two DataObjects have the same values for their datatype properties
System.out.println("DataObjects have same values for their datatype properties : " + EqualityHelper.INSTANCE.equalShallow(company, newDataObject));
//print out xml representation
System.out.println();
System.out.println("Original company DataObject:");
System.out.println(XMLHelper.INSTANCE.save(company, SdoSampleConstants.COMPANY_NAMESPACE, "company"));
System.out.println();
System.out.println("Deserialized company DataObject:");
System.out.println(XMLHelper.INSTANCE.save(newDataObject, SdoSampleConstants.COMPANY_NAMESPACE, "company"));
} catch (Exception e) {
System.out.println("Sorry there was an error encountered " + e.toString());
e.printStackTrace();
}
System.out.println("GoodBye");
}
}