public void testDefineOpenType() throws Exception
{
TypeHelper types = hc.getTypeHelper();
DataFactory factory = hc.getDataFactory();
XMLHelper xmlHelper = hc.getXMLHelper();
Type stringType = types.getType("commonj.sdo", "String");
Type decimalType = types.getType("commonj.sdo", "Decimal");
// Define a new open type - OpenQuote
DataObject openQuoteType = factory.create("commonj.sdo", "Type");
openQuoteType.set("uri", "http://www.example.com/open");
openQuoteType.set("name", "OpenQuote");
openQuoteType.set("open", Boolean.TRUE);
openQuoteType.setBoolean("open", true);
types.define(openQuoteType);
// Define new type - CompanyType
DataObject companyType = factory.create("commonj.sdo", "Type");
companyType.set("uri", "http://www.example.com/open");
companyType.set("name", "CompanyType");
// Create CompanyType property - "name"
DataObject nameProperty = companyType.createDataObject("property");
nameProperty.set("name", "name");
nameProperty.set("type", stringType);
nameProperty.set("containment", Boolean.TRUE);
types.define(companyType);
// Define open content property - company
DataObject symbolProperty = factory.create("commonj.sdo", "Property");
symbolProperty.set("name", "symbol");
symbolProperty.set("type", stringType);
types.defineOpenContentProperty("http://www.example.com/open", symbolProperty);
// Define open content property - company
DataObject companyProperty = factory.create("commonj.sdo", "Property");
companyProperty.set("name", "company");
companyProperty.set("type", companyType);
companyProperty.set("containment", Boolean.TRUE);
types.defineOpenContentProperty("http://www.example.com/open", companyProperty);
// Define open content property - price
DataObject priceProperty = factory.create("commonj.sdo", "Property");
priceProperty.set("name", "price");
priceProperty.set("type", decimalType);
types.defineOpenContentProperty("http://www.example.com/open", priceProperty);
// Create DataObject instances
DataObject openQuote = factory.create("http://www.example.com/open", "OpenQuote");
assertTrue(openQuote.getType().isOpen());
Property definedSymbolProperty = types.getOpenContentProperty("http://www.example.com/open", "symbol");
openQuote.set(definedSymbolProperty, "s1");