Hi,
 
I made an slight adaptation to an existing example of the distribution, however 
I get exceptions at runtime. Please assist:
 
 
package org.apache.tuscany.samples.sdo.advanced;
import java.util.ArrayList;import java.util.List;
import org.apache.tuscany.samples.sdo.SampleBase;import 
org.apache.tuscany.sdo.api.SDOUtil;
import commonj.sdo.DataObject;import commonj.sdo.Property;import 
commonj.sdo.Type;import commonj.sdo.helper.DataFactory;import 
commonj.sdo.helper.HelperContext;import commonj.sdo.helper.TypeHelper;import 
commonj.sdo.helper.XSDHelper;
public class MedicalScenario1 extends SampleBase {
    private static final String sdoApiUri = "commonj.sdo";    private static 
final String peopleURI = "www.example.org/people";    private static final 
String medicalURI = "www.example.org/MedicalTest";    boolean typesViaAPI = 
false;
    public MedicalScenario1(String[] args, Integer userLevel) {
        super(userLevel, SAMPLE_LEVEL_ADVANCED);        typesViaAPI = true;    }
    public MedicalScenario1(Integer userLevel) {        super(userLevel, 
SAMPLE_LEVEL_ADVANCED);    }
    /**     * @param args     * @throws Exception     */    public static void 
main(String[] args) throws Exception {
        MedicalScenario1 s = new MedicalScenario1(args, COMMENTARY_FOR_NOVICE); 
       s.run();
    }    /*     *  metadata for the sample documenting the areas of SDO that 
are explored     */    public static int[] CORE_FUNCTION = {        
SDOFacets.CONTAINMENT,        SDOFacets.CREATE_TYPES_USING_THE_SDO_API,        
SDOFacets.CREATE_TYPES_USING_XML_SCHEMA,        SDOFacets.OPEN_CONTENT,        
SDOFacets.NON_CONTAINMENT    };    public static int[] SIGNIFICANT_FUNCTION = { 
       SDOFacets.CREATE_DATAOBJECTS_BY_NAME,        
SDOFacets.ISMANY_PROPERTIES,        SDOFacets.GENERIC_DATA_GRAPH_TRAVERSAL,     
   SDOFacets.SAVING_DATA_TO_XML    };
    public void runSample() throws Exception {
        HelperContext scope = SDOUtil.createHelperContext();
 
        commentary("In this execution of the sample we use Types created\n" + 
"using the SDO API");
        createTypesViaAPI(scope);
        commentary(                COMMENTARY_FOR_NOVICE,                "The 
DataFactory associated with the scope that the types were created within\n" + 
"can be used to create an instance of the Person Type\n\n" + "DataFactory 
dataFactory = scope.getDataFactory();\n" + "DataObject person1 = 
dataFactory.create(\"www.example.org/people\", \"Person\");");
        DataFactory dataFactory = scope.getDataFactory();        DataObject 
person1 = dataFactory.create("www.example.org/people", "Person");
        commentary("The setString() of dataObject method is used to set the 
properties of the\n" + "new Person DataObject, including a unique identifier 
reference value\n" + "for the Person instance.\n\n" + 
"person1.setString(\"id\", \"1\");\n" + "person1.setString(\"name\", \"Joe 
Johnson Snr.\");\n" + "person1.setString(\"gender\", \"male\"););");
        person1.setString("id", "1");        person1.setString("name", "Joe 
Johnson Snr.");        person1.setString("gender", "male");
        commentary("An alternative approach to using the DataFactory directly 
to create\n" + "all DataObjects is to use a top-down approach,  where we create 
the\n" + "root object for a data graph,  and then use the 
createDataObject(String propertyName)\n" + "method to create the contained 
DataObjects.  Here we create the overall\n" + "medical test DataObject,  and 
then create the contained \"referrals\" DataObject\n\n" + "DataObject test = 
dataFactory.create(\"www.example.org/MedicalTest\", \"Test\");\n" + "DataObject 
referrals = test.createDataObject(\"referrals\");");
        DataObject test = dataFactory.create("www.example.org/MedicalTest", 
"Test");        DataObject referrals = test.createDataObject("referrals");
        commentary("Now we can add the person we created earlier into the set 
of people who have\n" + "been referred for this medical test.\n\n" + 
"test.set(\"referrals\", referrals);\n" + 
"referrals.getList(\"person\").add(person1);");
        test.set("referrals", referrals);        
referrals.getList("person").add(person1);
        commentary("Let's take a look at how the current state of the data" + 
"graph is rendered in XML ...");
        System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));
        commentary("The scenario unfolds and the Joe Johnson Snr. becomes a 
patient\n\n" + "DataObject patients = test.createDataObject(\"patients\");\n" + 
"patients.getList(\"person\").add(person1);");
        DataObject patients = test.createDataObject("patients");
        patients.getList("person").add(person1);
        commentary("Having added Joe Johnson Snr. to the set of patients we can 
see\n" + "the way that SDO preserves a single containment hierarchy within a\n" 
+ "datagraph.  If we look at the XML rendering of the graph again, we will\n" + 
"see that by adding him to the set of patients he has been removed from the\n" 
+ "containment property associated with the referrals set ...");
        System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));
        commentary("The 'Person' Type we are making use of here has been 
designed to be\n" + "multi-purpose,  in that the type has been declared to be 
'Open'.\n" + "That means that we can make use of 'Open Content' Properties\n" + 
"(If the type system has been defined using an XML schema\n" + "then these 
properties will derive from global elements)\n" + "We can look up open content 
Properties using the TypeHelper\n\n" + "Property conditionProperty = 
scope.getTypeHelper().getOpenContentProperty(\n" + "    
\"www.example.org/MedicalTest\", \"condition\");");
        Property conditionProperty = 
scope.getTypeHelper().getOpenContentProperty(                
"www.example.org/MedicalTest", "condition");
        commentary("We can create a value of the appropriate Type for this 
open\n" + "content Property\n\n" + "DataObject condition = 
dataFactory.create(conditionProperty.getType());\n" + 
"condition.setString(\"name\", \"Panar Syndrome\");");
        DataObject condition = dataFactory.create(conditionProperty.getType()); 
       condition.setString("name", "Panar Syndrome");
        commentary("If you ask a DataObject that has an 'Open' Type for its 
list of\n" + "values associated with an open content Property, and the 
DataObject\n" + "doesn't currently have any values for the Property,  it will 
return\n" + "an empty list. We can use the list to add values for the 
Property\n\n" + "List conditions = person1.getList(conditionProperty);\n" + 
"conditions.add(condition);");
        List conditions = person1.getList(conditionProperty);        
conditions.add(condition);
        commentary("A further look at the data graph in XML form shows\n" + 
"the presence of the new condition Property's value ...");
        System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));
        commentary("Having looked at the way SDO handles Open content\n" + "We 
now turn our attention to 'non-containment' relationships.\n" + "To do this we 
first create the set of people in the test that\n" + "constitute the blood 
relatives of patients -- 'relatives'\n" + "and define a new person to be Joe 
Johnson Snr's child.\n\n" + "DataObject relatives = 
test.createDataObject(\"relatives\");\n" + "DataObject person2 = 
relatives.createDataObject(\"person\");\n" + "person2.setString(\"id\", 
\"2\");\n" + "person2.setString(\"name\", \"Joe Johnson Jnr.\");\n" + 
"person2.setString(\"gender\", \"male\");");
        DataObject relatives = test.createDataObject("relatives");        
DataObject person2 = relatives.createDataObject("person");
        person2.setString("id", "2");        person2.setString("name", "Joe 
Johnson Jnr.");        person2.setString("gender", "male");
        commentary("Another quick look at the XML rendering of the graph 
confirms that\n" + "the set of relatives now includes Joe Johnson Jnr, but we 
haven't yet\n" + "defined who he is related to, or how.");
        System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));
        commentary("The Person type has a Property 'relative'\n" + "so we 
create a relative for Joe Johnson Snr.\n\n" + "DataObject relation = 
person1.createDataObject(\"relative\");\n" + "relation.set(\"target\", 
person2);\n" + "relation.set(\"relationship\", \"child\");");
        DataObject relation = person1.createDataObject("relative");        
relation.set("target", person2);        relation.set("relationship", "child");
        commentary("Now when we look at the XML rendering of the data graph\n" 
+ "we can see that the action of setting the 'target' of the\n" + "relationship 
to Joe Johnson Jnr didn't displace him from the\n" + "set of 'relatives',  
because the 'target' Property is a\n" + "non-containment Property.  This 
non-containment relationship\n" + "is reflected in the XML by a reference to 
the Person DataObject\n" + "describing Joe Johnson Jnr, \"2\" ...\n" + "If the 
Type system has been created from an XML schema then the\n" + "unique ID of the 
target can be used in the serialization.\n" + "If however the type system was 
defined dynamically,  then the reference\n" + "will be represented as an XPath 
from the root of the data graph.");
        System.out.println(scope.getXMLHelper().save(test,                
"www.example.org/MedicalTest", "test"));
        commentary("Now that the graph is complete we can use the 
PrintDataGraph sample utility\n" +                "to reveal the full SDO 
nature of the final data graph\n\n" +                "");
        PrintDataGraph printer = new PrintDataGraph(COMMENTARY_FOR_ADVANCED);   
     printer.printDataObject(test);        
System.out.println(printer.getBuf());    }
    /**     * @throws Exception     * @throws FileNotFoundException     */    
private void createTypesViaAPI(HelperContext scope) throws Exception {
        List typeDeclarations = new ArrayList();
        TypeHelper typeHelper = scope.getTypeHelper();
        Type stringType = typeHelper.getType(sdoApiUri, "String");        Type 
dateType = typeHelper.getType(sdoApiUri, "Date");        Type booleanType = 
typeHelper.getType(sdoApiUri, "Boolean");
        // <complexType name="Person">        // <sequence>        // <element 
name="dob" type="date"/>        // <element name="relative" 
maxOccurs="unbounded" type="tns:Relative"/>        // <any namespace="##other" 
processContents="lax" maxOccurs="unbounded"/>        // </sequence>        // 
<attribute name="id" type="ID"/>        // <attribute name="name" 
type="string"/>        // <attribute name="gender" type = "tns:Gender"/>        
// </complexType>
        DataObject personTypeDesc = createTypeDescription(scope, peopleURI,     
           "Person");        typeDeclarations.add(personTypeDesc);
        addPropertyDescription(personTypeDesc, stringType, "name");        
addPropertyDescription(personTypeDesc, dateType, "dob");        
addPropertyDescription(personTypeDesc, stringType, "id"); // set to unique      
  // identifier?        addPropertyDescription(personTypeDesc, stringType, 
"gender"); // restrict?
        DataObject relativeType = createTypeDescription(scope, peopleURI,       
         "Relative"); // forward declare the Relative type        
typeDeclarations.add(relativeType);
        DataObject rp = addPropertyDescription(personTypeDesc, relativeType,    
            "relative");        rp.setBoolean("many", true);        
personTypeDesc.set("open", Boolean.TRUE);
        // <complexType name="Relative">        // <attribute name="target" 
type="IDREF" sdoxml:propertyType="tns:Person"        // use="required"/>        
// <attribute name="relationship" type="string" />        // <attribute 
name="genetic" use="optional" type="boolean"/>        // </complexType>
        addPropertyDescription(relativeType, stringType, "relationship");       
 addPropertyDescription(relativeType, booleanType, "genetic");        
DataObject targetPersonProp = addPropertyDescription(relativeType,              
  personTypeDesc, "target");        targetPersonProp.setBoolean("containment", 
false);
        // <complexType name="PersonSet">        // <sequence>        // 
<element name="person" type="tns:Person" maxOccurs="unbounded"/>        // 
</sequence>        // </complexType>
        DataObject pSet = createTypeDescription(scope, peopleURI, "PersonSet"); 
       typeDeclarations.add(pSet);        DataObject pSetProperty = 
addPropertyDescription(pSet, personTypeDesc,                "person");        
pSetProperty.setBoolean("many", true);
        // <complexType name="Condition">        // <sequence>        // 
<element name="diagnosed" type="date" />        // </sequence>        // 
<attribute name="name" type="tns:ConditionName" />        // </complexType>
        DataObject condition = createTypeDescription(scope, medicalURI, 
"Condition");        typeDeclarations.add(condition);        
addPropertyDescription(condition, booleanType, "diagnosed");        
addPropertyDescription(condition, stringType, "name"); // constrain?
        // <complexType name="Test">        // <sequence>        // <element 
name="referrals" type="people:PersonSet" />        // <element name="patients" 
type="people:PersonSet" />        // <element name="relatives" 
type="people:PersonSet" />        // </sequence>        // </complexType>
        DataObject testType = createTypeDescription(scope, medicalURI, "Test"); 
       typeDeclarations.add(testType);        addPropertyDescription(testType, 
pSet, "referrals");        addPropertyDescription(testType, pSet, "patients");  
      addPropertyDescription(testType, pSet, "relatives");
        List types = typeHelper.define(typeDeclarations);
        DataObject p = scope.getDataFactory().create("commonj.sdo", 
"Property");        p.set("type", typeHelper.getType(medicalURI, "Condition")); 
       p.set("name", "condition");        p.setBoolean("many", true);        
p.setBoolean("containment", true); // why is this not the default?
        typeHelper.defineOpenContentProperty(medicalURI, p);
        System.out.print("XSD create is: " + 
XSDHelper.INSTANCE.generate(types));
    }
    /**     * @param uri     * @param name     * @return     */    private 
DataObject createTypeDescription(HelperContext scope, String uri,            
String name) {        DataObject typeDesc = 
scope.getDataFactory().create(sdoApiUri, "Type");        typeDesc.set("name", 
name);        typeDesc.set("uri", uri);        return typeDesc;    }
    private DataObject addPropertyDescription(            DataObject 
containerTypeDescription, Object propertyType,            String propertyName) 
{        DataObject property = 
containerTypeDescription.createDataObject("property");        
property.set("type", propertyType);        property.setString("name", 
propertyName);        property.setBoolean("containment", true);        return 
property;    }}
 
 
> To: [email protected]> Subject: Re: Convert HelperContext to XSD> 
> From: [EMAIL PROTECTED]> Date: Mon, 31 Mar 2008 10:27:13 -0400> > Take a look 
> at XSDHelper.generate().> > Frank.> > Gerardo Corro <[EMAIL PROTECTED]> wrote 
> on 03/31/2008 10:16:06 AM:> > > > > Hi, > > > > I wonder if theres a way to 
> create a XSD DSO definition from a > HelperContext.> > > > I mean, the normal 
> process is to setup a HelperContext from an XSD, > > from there read an XML 
> file that contains the actual DSOs.> > > > I want to go the create Types 
> through the API, and then persist them> > as an XSD. I wonder if there's a 
> way to do that.> > > > Thanks!!!!> > 
> _________________________________________________________________> > Connect 
> to the next generation of MSN Messenger > > 
> http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-> > 
> us&source=wlmailtagline> > 
> ---------------------------------------------------------------------> To 
> unsubscribe, e-mail: [EMAIL PROTECTED]> For additional commands, e-mail: 
> [EMAIL PROTECTED]> 
_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE

Reply via email to