"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("The default state for monitoring changes for the DataObject when created in this\n" +
"way is the monitoring is switched off, so we switch it on. (Note that if you\n" +
"get your data graphs from a data Access Service then this service may turn on\n" +
"change monitoring be default\n\n" +
"test.getChangeSummary().beginLogging();");
test.getChangeSummary().beginLogging();
commentary("We'll repeat the whole of the MedicalScenario sample, but then at the \n" +
"last minute we'll decide it was all wrong and roll back the changes......");
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"