import commonj.sdo.helper.TypeHelper;
public class SerializeTypesTestCase extends TestCase {
public void testSerializeTypesRoundTrip() throws Exception {
TypeHelper types = SDOUtil.createTypeHelper();
DataFactory factory = SDOUtil.createDataFactory(types);
Type intType = types.getType("commonj.sdo", "Int");
Type stringType = types.getType("commonj.sdo", "String");
// create a new Type for Addresses
DataObject addressType = factory.create("commonj.sdo", "Type");
addressType.set("uri", "http://example.com/address");
addressType.set("name", "Address");
// create a address street property
DataObject addrStProperty = addressType.createDataObject("property");
addrStProperty.set("name", "addrSt");
addrStProperty.set("type", stringType);
// create a new Type for Customers
DataObject customerType = factory.create("commonj.sdo", "Type");
customerType.set("uri", "http://example.com/customer");
customerType.set("name", "Customer");
// create a customer number property
DataObject custNumProperty = customerType.createDataObject("property");
custNumProperty.set("name", "custNum");
custNumProperty.set("type", intType);
// create a first name property
DataObject firstNameProperty = customerType.createDataObject("property");
firstNameProperty.set("name", "firstName");
firstNameProperty.set("type", stringType);
// create a last name property
DataObject lastNameProperty = customerType.createDataObject("property");
lastNameProperty.set("name", "lastName");
lastNameProperty.set("type", stringType);
// create an address property
DataObject addressProperty = customerType.createDataObject("property");
addressProperty.set("name", "address");
addressProperty.set("type", addressType);
addressProperty.setBoolean("containment", true);
// now define the Address and Customer type so that addresses and customers can be made
List types2define = new ArrayList();
types2define.add(addressType);
types2define.add(customerType);
List typesDefined = types.define(types2define);
// Create an empty data graph and add a root object, an instance of customerType
//
DataGraph dataGraph = SDOUtil.createDataGraph();
Type customerTypeDefined = (Type) typesDefined.get(1);
DataObject customer1 = dataGraph.createRootObject(customerTypeDefined);
customer1.setInt("custNum", 1);
customer1.set("firstName", "John");
customer1.set("lastName", "Adams");
DataObject address = customer1.createDataObject("address");
address.set("addrSt", "577 Airport Blvd");
SDOUtil.registerDataGraphTypes(dataGraph, typesDefined);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
SDOUtil.saveDataGraph(dataGraph, baos, null);
//SDOUtil.saveDataGraph(dataGraph, System.out, null);
TypeHelper deserializingTypeHelper = SDOUtil.createTypeHelper();
// The following is a kludge to force deserialization of metadata into a different TypeHelper (scope)
// TBD figure out a proper non-EMF way to do this.
Map options = new HashMap();
Object differentFromSerializing = ((TypeHelperImpl) deserializingTypeHelper).getExtendedMetaData();