summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/java-M1-final/java/das
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/java-M1-final/java/das')
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/pom.xml34
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/pom.xml103
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ApplyChangesCommand.java101
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java222
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandFactory.java93
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroup.java63
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroupFactory.java37
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java67
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java52
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Key.java58
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java62
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Parameter.java128
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ResultSetShape.java96
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/SDODataTypes.java64
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java411
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java41
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java44
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java124
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java64
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java98
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java179
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java206
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java120
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java91
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java98
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java105
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java293
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java137
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java169
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java140
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java52
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java75
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java43
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java171
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java133
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java111
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java68
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java199
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java79
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java266
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java80
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java77
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupFactoryImpl.java31
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupImpl.java207
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java145
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java95
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java29
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java148
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java25
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java72
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java38
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java49
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java79
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java82
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java45
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java64
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java107
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java150
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java87
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java168
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java100
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java73
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java206
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java25
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java42
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java30
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java97
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java166
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java51
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java73
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugFormatter.java34
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugUtil.java66
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/LICENSE.txt1277
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/MANIFEST.MF13
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/NOTICE18
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/README.txt35
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/config.xsd103
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/dasmodel4.mdl4645
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java150
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java124
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java165
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java105
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java100
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java114
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java244
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java377
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java303
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java149
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java93
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java294
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java154
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/NameMappingTests.java64
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java64
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java155
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java85
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java108
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java103
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java85
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java157
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java62
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java81
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java121
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java105
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java90
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java256
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java194
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java85
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java96
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java54
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java55
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java62
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java40
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java66
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyFactory.java73
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyType.java101
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DatagraphRoot.java81
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DepartmentType.java153
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/EmployeeType.java137
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyFactoryImpl.java174
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyPackageImpl.java1258
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyTypeImpl.java303
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DatagraphRootImpl.java252
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DepartmentTypeImpl.java395
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/EmployeeTypeImpl.java333
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/AnOrder.java216
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/Customer.java153
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/CustomerFactory.java64
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/DataGraphRoot.java66
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/AnOrderImpl.java461
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerFactoryImpl.java150
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerImpl.java395
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerPackageImpl.java847
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/DataGraphRootImpl.java213
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java45
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java54
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java45
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java42
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java44
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java45
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java45
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java41
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java45
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java42
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java43
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java52
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java51
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java64
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java35
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java155
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java238
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java42
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java79
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java96
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java81
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java87
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java82
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java40
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java73
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java37
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java35
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java98
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java39
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java34
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java34
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java58
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/1xM_mapping_no_cud.xml33
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/BooksConfig.xml24
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyConfig.xml48
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyEmployeeConfig.xml67
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustOrdersConnectionProps.xml61
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithConverter.xml24
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithIDConverter.xml23
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomersOrdersConfig.xml45
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/OrdersOrderDetailsConfig.xml30
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/PartsConfig.xml27
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyDepartmentMapping.xml36
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyMapping.xml22
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMapping.xml25
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithCUD.xml28
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml28
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerOrderMapping.xml32
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicStaticCustomer.xml25
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/cityStates.xml37
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.ecore130
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.genmodel38
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.xsd53
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMapping.xml39
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMappingWithConverters.xml41
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.ecore96
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.genmodel32
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.xsd47
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerMapping.xml25
-rw-r--r--sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerOrderRelationshipMapping.xml31
193 files changed, 27062 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/pom.xml b/sca-java-1.x/tags/java-M1-final/java/das/pom.xml
new file mode 100644
index 0000000000..98da287328
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/pom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright (c) 2005-2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.
+ -->
+<project>
+ <parent>
+ <groupId>org.apache.tuscany</groupId>
+ <artifactId>tuscany-project</artifactId>
+ <version>incubating-M1</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.tuscany.das</groupId>
+ <artifactId>tuscany-das</artifactId>
+ <packaging>pom</packaging>
+ <name>Tuscany DAS</name>
+ <version>incubating-M1</version>
+
+ <modules>
+ <module>rdb</module>
+ </modules>
+
+</project>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/pom.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/pom.xml
new file mode 100644
index 0000000000..df7e1072c3
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/pom.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright (c) 2005-2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.
+ -->
+<project>
+ <parent>
+ <groupId>org.apache.tuscany.das</groupId>
+ <artifactId>tuscany-das</artifactId>
+ <version>incubating-M1</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>tuscany-das-rdb</artifactId>
+ <name>Tuscany DAS for Relational Databases</name>
+ <version>incubating-M1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>commonj</groupId>
+ <artifactId>sdo-api</artifactId>
+ <version>incubating-M1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany</groupId>
+ <artifactId>tuscany-sdo-impl</artifactId>
+ <version>incubating-M1</version>
+ <scope>compile</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.2.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.tuscany</groupId>
+ <artifactId>tuscany-sdo-plugin</artifactId>
+ <executions>
+ <execution>
+ <configuration>
+ <schemaFile>${basedir}/src/main/resources/config.xsd</schemaFile>
+ <generateLoader>true</generateLoader>
+ <generateSwitch>true</generateSwitch>
+ <noNotification>true</noNotification>
+ <noUnsettable>true</noUnsettable>
+ </configuration>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>**/*AllTestsDerby.java</include>
+ </includes>
+ <reportFormat>brief</reportFormat>
+ <useFile>false</useFile>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
+
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ApplyChangesCommand.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ApplyChangesCommand.java
new file mode 100644
index 0000000000..75f81ca1e3
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ApplyChangesCommand.java
@@ -0,0 +1,101 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import java.sql.Connection;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+/**
+ * An ApplyChangesCommand is used to flush the changes associated with a
+ * modified graph of DataObjects to a database.
+ *
+ *
+ */
+public interface ApplyChangesCommand {
+
+ /**
+ * Adds a user-provided update command. In the absence of a user-provided
+ * command, the DAS will generate one. However this alternative may make
+ * sense if the user requires a SQL statement different from what the DAS
+ * generates.
+ *
+ * @param type
+ * The DataObject type this command applys to
+ * @param cmd
+ * The Command used to UPDATE data objects of the specified type
+ */
+ public void addUpdateCommand(Type type, Command cmd);
+
+ /**
+ * Adds a user-provided create command. In the absence of a user-provided
+ * command, the DAS will generate one. However this alternative may make
+ * sense if the user requires a SQL statement different from what the DAS
+ * generates.
+ *
+ * @param type
+ * The DataObject type this command applys to
+ * @param cmd
+ * The Command used to INSERT data objects of the specified type
+ */
+ public void addCreateCommand(Type type, Command cmd);
+
+ /**
+ * Adds a user-provided delete command. In the absence of a user-provided
+ * command, the DAS will generate one. However this alternative may make
+ * sense if the user requires a SQL statement different from what the DAS
+ * generates.
+ *
+ * @param type
+ * The DataObject type this command applys to
+ * @param cmd
+ * The Command used to DELETE data objects of the specified type
+ */
+ public void addDeleteCommand(Type type, Command cmd);
+
+ /**
+ * The change history is scanned and modifications to the graph of data
+ * objects are flushed to the database.
+ *
+ * @param root
+ * the topmost containing data object
+ */
+ public void execute(DataObject root);
+
+ /**
+ * Provides the java.sql.Connection to be used for this executing this
+ * command.
+ *
+ * @param connection
+ * the java.sql.Connection
+ */
+ public void setConnection(Connection connection);
+
+ /**
+ * Provides the java.sql.Connection to be used for this executing this
+ * command.
+ *
+ * @param connection
+ * the java.sql.Connection
+ * @param manageTransactions
+ * <code>true</code> if the DAS should perform tx
+ * commit/rollback
+ */
+ public void setConnection(Connection connection, boolean manageTransactions);
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java
new file mode 100644
index 0000000000..37d67fd10c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java
@@ -0,0 +1,222 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.impl.CommandFactoryImpl;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+/**
+ * A Command is used to execute a read or write to a database
+ *
+ *
+ */
+public interface Command {
+
+ public static CommandFactory FACTORY = new CommandFactoryImpl();
+
+ /**
+ * Performs the function defined by the command
+ */
+ public void execute();
+
+ /**
+ * Performs the function defined by the command and return the results in
+ * the root DataObject
+ *
+ * @return the root DataObject
+ */
+ public DataObject executeQuery();
+
+ /**
+ * Returns the parameter associated with "name"
+ *
+ * @param name
+ * the name of the parameter
+ * @return the associated parameter
+ */
+ public Parameter getParameter(String name);
+
+ /**
+ * Returns the Parameter at index
+ *
+ * @param index
+ * the index of the Parameter
+ * @return the associated Parameter
+ */
+ public Parameter getParameter(int index);
+
+ /**
+ * Sets the value of the named Parameter
+ *
+ * @param name
+ * the name of this Parameter
+ * @param value
+ * the value for the Parameter
+ */
+ public void setParameterValue(String name, Object value);
+
+ /**
+ * Sets the value of the associated Parameter
+ *
+ * @param index
+ * the index of the Parameter
+ * @param value
+ * the value for the Parameter
+ */
+ public void setParameterValue(int index, Object value);
+
+ /**
+ * Sets the "type" of the associated Parameter
+ *
+ * @param name
+ * the name of this Parameter
+ * @param type
+ * the SDODataTypes-defined "type" for the Parameter.
+ */
+ public void setParameterType(String string, Type dataType);
+
+ /**
+ * Sets the "type" of the associated Parameter
+ *
+ * @param index
+ * the index of the Parameter
+ * @param type
+ * the SDODataTypes-defined "type" for the Parameter.
+ */
+ public void setParameterType(int index, Type dataType);
+
+ /**
+ * Returns the value of the associated Parameter
+ *
+ * @param name
+ * the name of the Parameter
+ * @return the value of the Parameter
+ */
+ public Object getParameterValue(String name);
+
+ /**
+ * Returns the value of the associated Parameter
+ *
+ * @param index
+ * the index of the Parameter
+ * @return the value of the Parameter
+ */
+ public Object getParameterValue(int index);
+
+ /**
+ * Adds a Parameter to the command
+ *
+ * @param index
+ * the index of the parameter
+ * @param sdoType
+ * the commonj.sdo.Type of the Parameter
+ */
+ public void addParameter(int index, Type sdoType);
+
+ /**
+ * Adds a Parameter to the command
+ *
+ * @param name
+ * the index of the parameter
+ * @param sdoType
+ * the commonj.sdo.Type of the Parameter
+ */
+ public void addParameter(String name, Type sdoType);
+
+ /**
+ * Adds a Parameter to the command
+ *
+ * @param index
+ * the index of the parameter
+ * @param direction
+ * the direction of the Parameter. Either Parameter.IN,
+ * Parameter.OUT or Parameter.INOUT
+ * @param sdoType
+ * specifies the type as a commonj.sdo.Type from
+ * {@link SDODataTypes}
+ */
+ public void addParameter(int index, int direction, Type sdoType);
+
+ /**
+ * Adds a Parameter to the command
+ *
+ * @param name
+ * the name associated with the Parameter
+ * @param direction
+ * the direction of the Parameter. Either Parameter.IN,
+ * Parameter.OUT or Parameter.INOUT
+ * @param sdoType
+ * specifies the type as a commonj.sdo.Type from
+ * {@link SDODataTypes}
+ */
+ public void addParameter(String name, int direction, Type sdoType);
+
+ /**
+ * Specifies an object model for a graph of DataObjects returned by
+ * #executeQuery()
+ *
+ * @param schema
+ * the model as a commonj.sdo.Type
+ */
+ public void setDataObjectModel(Type schema);
+
+ /**
+ * Defines the structure of the ResultSet returned by the JDBC Driver when
+ * this command is executed. If the shape is not specified then the shape is
+ * taken from the ResultSetMetatadta instance provided by the JDBC Driver.
+ * <p>
+ * This method is prvided primarily to support platforms (such as Oracle)
+ * that do not provide complete support for ResultSetMetadata
+ *
+ * @param shape
+ * the specified result set shape
+ * @see ResultSetShape
+ */
+ public void setResultSetShape(ResultSetShape shape);
+
+ /**
+ * Provides the java.sql.Connection to be used for this executing this
+ * command.
+ *
+ * @param connection
+ * the java.sql.Connection
+ */
+ public void setConnection(Connection connection);
+
+ /**
+ * Provides the java.sql.Connection to be used for this executing this
+ * command.
+ *
+ * @param connection
+ * the java.sql.Connection
+ * @param manageTransactions
+ * <code>true</code> if the DAS should perform tx
+ * commit/rollback
+ */
+ public void setConnection(Connection connection, boolean manageTransactions);
+
+ /**
+ * Cleans up and realeases all resources associated with this command. This
+ * should be called when the application is done with this command.
+ */
+ public void close();
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandFactory.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandFactory.java
new file mode 100644
index 0000000000..2bf5e4143d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandFactory.java
@@ -0,0 +1,93 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.tuscany.das.rdb.config.Config;
+
+/**
+ * A CommandFactory produces {@link Command} and {@link ApplyChangesCommand}
+ * instances.
+ *
+ *
+ */
+public interface CommandFactory {
+
+ /**
+ * Creates a Command based on the provided SQL statement
+ *
+ * @param sql
+ * The SQL statement
+ * @return returns a Command instance
+ */
+ public Command createCommand(String sql);
+
+ /**
+ * Creates a Command based on the provided SQL statement and configuration
+ *
+ * @param sql
+ * The SQL statement
+ * @param mappingModel
+ * The congiguration as XML file stream
+ * @return returns a COmmand instance
+ */
+ public Command createCommand(String sql, InputStream config);
+
+ /**
+ * Creates a Command based on the provided SQL statement and configuration
+ *
+ * @param sql
+ * The SQL statement
+ * @param config
+ * The congiguration as Config instance
+ * @return returns a COmmand instance
+ */
+ public Command createCommand(String sql, Config config);
+
+ /**
+ * Creates an {@linkApplyChangesCommand} instance
+ *
+ * @return Returns the ApplyChangesCommand instance
+ */
+ public ApplyChangesCommand createApplyChangesCommand();
+
+ /**
+ * Creates an {@linkApplyChangesCommand} instance with the provided
+ * configuration
+ *
+ * @param config
+ * The provided configuration as a stream over an xml file
+ * @return Returns an ApplyChangesCOmmand in stance
+ * @throws IOException
+ */
+ public ApplyChangesCommand createApplyChangesCommand(InputStream config) throws IOException;
+
+
+ /**
+ * Creates an {@linkApplyChangesCommand} instance with the provided
+ * configuration
+ *
+ * @param config
+ * The provided configuration as a Config instance
+ * @return Returns an ApplyChangesCommand in stance
+ * @throws IOException
+ */
+ public ApplyChangesCommand createApplyChangesCommand(Config config);
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroup.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroup.java
new file mode 100644
index 0000000000..c41f9dcfdc
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroup.java
@@ -0,0 +1,63 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.impl.CommandGroupFactoryImpl;
+
+/**
+ * A CommandGroup represents a set of {@link Command} and single
+ * {@link ApplyChangesCommand} that are created from a common config file.
+ *
+ *
+ */
+public interface CommandGroup {
+
+ public static CommandGroupFactory FACTORY = new CommandGroupFactoryImpl();
+
+ /**
+ * Return the ApplyChangesCommnad for this configured factory
+ *
+ * @return Returns an instance of ApplyChangesCommand
+ */
+ public ApplyChangesCommand getApplyChangesCommand();
+
+ /**
+ * Gets the named command from this factory's inventory
+ *
+ * @param name
+ * The identifying name of the requested command
+ * @return Returns the identified command
+ */
+ public Command getCommand(String name);
+
+ /**
+ * Set the default connection for all command in the group
+ *
+ * @param connection
+ */
+ public void setConnection(Connection connection);
+
+ /**
+ * If the CommandGroup is managing connections then this method
+ * must be called when the client is done with the instance.
+ *
+ */
+ public void releaseResources();
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroupFactory.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroupFactory.java
new file mode 100644
index 0000000000..dfcdd81823
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/CommandGroupFactory.java
@@ -0,0 +1,37 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import java.io.InputStream;
+
+/**
+ * A CommandGroupFactory produces {@link CommandGroup} instances.
+ *
+ *
+ */
+public interface CommandGroupFactory {
+
+ /**
+ * Creates a CommandGroup based on the provided config file stream
+ *
+ * @param configStream
+ * A stream over a DAS config file
+ * @return returns a CommandGroup instance
+ */
+ public CommandGroup createCommandGroup(InputStream configStream);
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
new file mode 100644
index 0000000000..c7357fbe09
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
@@ -0,0 +1,67 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.impl.ConfigFactoryImpl;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+
+/**
+ * A ConfigHelper is used as an aid in programmatic construction of Config instances.
+ * Manual contrution fo COnfig is an alternative to providing needed configuration
+ * information in an XML file
+ *
+ */public class ConfigHelper {
+
+ private Config config;
+
+ private MappingWrapper configWrapper;
+
+ private ConfigFactory factory = ConfigFactoryImpl.eINSTANCE;
+
+ public ConfigHelper() {
+ config = factory.createConfig();
+ configWrapper = new MappingWrapper(config);
+ }
+
+ public ConfigHelper(Config config) {
+ this.config = config;
+ configWrapper = new MappingWrapper(config);
+ }
+
+ public Config newInstance() {
+ return factory.createConfig();
+ }
+
+ public void addPrimaryKey(String columnName) {
+ configWrapper.addPrimaryKey(columnName);
+ }
+
+ public void addRelationship(String parentName, String childName) {
+ configWrapper.addRelationship(parentName, childName);
+ }
+
+ public void addTable(String name, String propertyName) {
+ configWrapper.addTable(name, propertyName);
+ }
+
+ public Config getConfig() {
+ return config;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java
new file mode 100644
index 0000000000..eb1ed24230
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java
@@ -0,0 +1,52 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+/**
+ * A lightweight Table-column <--> DataObject-property converter framework.
+ * Converters allow a user to insert a transformation between a column value and
+ * is destination DataObject property value. For example, by default, a VARCHAR
+ * column will be represented as a String in its corresponding DataObject
+ * property. A user could insert a converter that transforms the the VARCHAR
+ * value to an Integer. If this is done then although the column returns
+ * character data, the DataObject property will be an Integer
+ *
+ *
+ */
+public interface Converter {
+
+ /**
+ * Transform the columnData object to a new value and possibly new type.
+ * This should be the invers operation of #getColumnValue
+ *
+ * @param columnData
+ * The column value to transorm
+ * @return Returns the transformed value
+ */
+ public Object getPropertyValue(Object columnData);
+
+ /**
+ * Transform the columnData object to a new value and possibly new type.
+ * This should be the invers operation of #getPropertyValue
+ *
+ * @param propertyData
+ * The property value to transform
+ * @return Returns the transformed value
+ */
+ public Object getColumnValue(Object propertyData);
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Key.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Key.java
new file mode 100644
index 0000000000..4622b2a8fb
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Key.java
@@ -0,0 +1,58 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A key instance is used to describe a Table key definition. This is used
+ * primarily for compound keys since simple keys are described with a name.
+ *
+ *
+ */public class Key {
+
+ private List columnNames = new ArrayList();
+
+ /**
+ * Contructor for a single column key
+ * @param columnName The single column fo rthe key
+ */
+ public Key(String columnName) {
+ super();
+ this.columnNames.add(columnName);
+ }
+
+ /**
+ * Constructor for a compound key
+ * @param columns The array of column names that compose the key
+ */
+ public Key(String[] columns) {
+ for (int i=0;i<columns.length; i++) {
+ this.columnNames.add(columns[i]);
+ }
+ }
+
+ /**
+ * Returns a List of column names that compose the key
+ * @return a list of column names
+ */
+ public List getColumNames() {
+ return this.columnNames;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java
new file mode 100644
index 0000000000..4edb447e31
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import commonj.sdo.DataObject;
+
+/**
+ * An iterator-like interface to conveniently move through chunks of data. The
+ * idea is that a Pager works with a read Command. The read command returns a
+ * large amount of data and the client wants to work with chunks of it at a
+ * time. So the Pager is created on the command and each call to next returns
+ * the next chunk of data. This is done completely disconnected. No cursor is
+ * maintained between calls to #next.
+ *
+ * TODO - This is very preliminary. We need to look at this interface in the
+ * context of disonnected scenarios such as a web app. The Pager instance will
+ * probably be saved in session so it must be very light and cannot reference a
+ * connection. Also, we probably need to define a factory or add a method to set
+ * page size.
+ *
+ *
+ */
+public interface Pager {
+
+ /**
+ * Get the next page of data
+ *
+ * @return the next page of data
+ */
+ public DataObject next();
+
+ /**
+ * Get the page prior to the last page returned
+ *
+ * @return the previous page
+ */
+ public DataObject previous();
+
+ /**
+ * Return a specific identified page.
+ *
+ * @param page
+ * The number of the page to return
+ * @return the indicated page
+ */
+ public DataObject getPage(int page);
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Parameter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Parameter.java
new file mode 100644
index 0000000000..89251cbd0f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Parameter.java
@@ -0,0 +1,128 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import commonj.sdo.Type;
+
+/**
+ * Describes a single parameter for a parameterized SQL statement.
+ *
+ *
+ */
+public interface Parameter {
+
+ /**
+ * Value for "Direction" that indicates that a parameter is soley for input.
+ */
+ final static int IN = 1;
+
+ /**
+ * Value for "Direction" that indicates that a parameter is soley for
+ * output. Out parameters only apply to Stored Procedures
+ */
+ final static int OUT = 2;
+
+ /**
+ * Value for "Direction" that indicates that a parameter is for both input
+ * and output. In-out parameters only apply to stored procedures
+ */
+ final static int IN_OUT = 3;
+
+ /**
+ * A parameter has a type in terms of SDO2 DataTypes. Legal values are
+ * provided in {@link SDODataTypes}
+ * <p>
+ * Explicit definition of type is required only for OUT parameters of stored
+ * procedures commands
+ *
+ * @param type
+ */
+ public void setType(Type type);
+
+ /**
+ * Set the index of the parameter. For example, if a SQL statement requires
+ * two parameters, the first one has an index of one.
+ *
+ * @param index
+ * The index of the parameter
+ */
+ public void setIndex(int index);
+
+ /**
+ * Sets the name of the parameter
+ *
+ * @param name
+ * the parameter name
+ */
+ public void setName(String name);
+
+ /**
+ * Sets the value of the parameter. All IN and IN_OUT parameters must be set
+ * beore a command can be executed.
+ *
+ * @param value
+ * The value for the parameter
+ */
+ public void setValue(Object value);
+
+ /**
+ * Parameters are typically IN and this is the default. A parameter's
+ * direction must be set when the parameter is OUT or IN_OUT.
+ *
+ * @param direction
+ * the parameters direction
+ */
+ public void setDirection(int direction);
+
+ /**
+ * TODO Not sure this method is needed.
+ * @param converter
+ */
+ public void setConverter(Converter converter);
+
+ /**
+ * @return the type of the paramater in terms of {@link SDODataTypes}
+ */
+ public Type getType();
+
+ /**
+ * TODO Not sure this is is needed.
+ * @return
+ */
+ public Converter getConverter();
+
+ /**
+ * @return the index of the parameter
+ */
+ public int getIndex();
+
+ /**
+ * @return the name of the parameter
+ */
+ public String getName();
+
+ /**
+ * @return the value of the parameter
+ */
+ public Object getValue();
+
+ /**
+ * @return the direction of the parameter
+ */
+ public int getDirection();
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ResultSetShape.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ResultSetShape.java
new file mode 100644
index 0000000000..46838778d1
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ResultSetShape.java
@@ -0,0 +1,96 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.graphbuilder.schema.ResultSetTypeMap;
+
+import commonj.sdo.Type;
+
+/**
+ * Describes the structure of the result set returned from execution
+ * of a SELECT statement. This description is typcially not required since the
+ * shape can be retreived from the JDBC ResultSetMetadata. However, some platforms
+ * such as Oracle do not support fully suport ResultSetMedata.
+ * <p>
+ * There may also be a performance boost when using this interface.
+ *
+ *
+ */
+public class ResultSetShape {
+
+ private final String[] columns;
+ private final String[] tables;
+ private final Type[] types;
+
+ public ResultSetShape(String[] t, String[] c, Type[] dataTypes) {
+ this.columns = c;
+ this.tables = t;
+ this.types = dataTypes;
+ }
+
+ public ResultSetShape(ResultSetMetaData metadata) throws SQLException {
+ columns = new String[metadata.getColumnCount()];
+ tables = new String[metadata.getColumnCount()];
+ types = new Type[metadata.getColumnCount()];
+
+ ResultSetTypeMap typeMap = ResultSetTypeMap.instance;
+ for (int i = 1; i <= metadata.getColumnCount(); i++) {
+ tables[i-1] = metadata.getTableName(i);
+ columns[i-1] = metadata.getColumnName(i);
+ types[i-1] = typeMap.getType(metadata.getColumnType(i), true);
+ }
+ }
+
+ public int getColumnCount() {
+ return columns.length;
+ }
+
+ public String getTableName(int i) {
+ return tables[i-1];
+ }
+
+ public String getColumnName(int i) {
+ return columns[i-1];
+ }
+
+ public Type getColumnType(int i) {
+ return types[i-1];
+ }
+
+
+ public String toString() {
+ StringBuffer result = new StringBuffer();
+ result.append(" column/table/type: ");
+ for (int i=0; i < columns.length; i++) {
+ result.append(columns[i]);
+ result.append('\t');
+ result.append(tables[i]);
+ result.append('\t');
+ if ( types[i] == null )
+ result.append("null");
+ else
+ result.append(types[i].getName());
+ result.append('\n');
+ }
+
+ return result.toString();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/SDODataTypes.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/SDODataTypes.java
new file mode 100644
index 0000000000..683d5092c7
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/SDODataTypes.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb;
+
+import commonj.sdo.Type;
+import commonj.sdo.helper.TypeHelper;
+
+/**
+ * Defines SDO data types. This is used primalirly to type stored procedure OUT parameters.
+ *
+ */public class SDODataTypes {
+
+ static TypeHelper helper = TypeHelper.INSTANCE;
+
+ final public static Type BOOLEAN = helper.getType("commonj.sdo", "Boolean");
+ final public static Type BYTE = helper.getType("commonj.sdo", "Byte");
+ final public static Type BYTES = helper.getType("commonj.sdo", "ByteArray");
+ final public static Type CHARACTER = helper.getType("commonj.sdo", "Char");
+ final public static Type DATE = helper.getType("commonj.sdo", "Date");
+ final public static Type DATETIME = helper.getType("commonj.sdo", "Date");
+ final public static Type DAY = helper.getType("commonj.sdo", "Date");
+ final public static Type DECIMAL = helper.getType("commonj.sdo", "Float");
+ final public static Type DOUBLE =helper.getType("commonj.sdo", "Double");
+ final public static Type DURATION = helper.getType("commonj.sdo", "Date");
+ final public static Type FLOAT = helper.getType("commonj.sdo", "Float");
+ final public static Type INT = helper.getType("commonj.sdo", "Int");
+ final public static Type INTEGER = helper.getType("commonj.sdo", "Integer");
+ final public static Type LONG = helper.getType("commonj.sdo", "Long");
+ final public static Type MONTH = helper.getType("commonj.sdo", "Date");
+ final public static Type MONTHDAY = helper.getType("commonj.sdo", "Date");
+ final public static Type OBJECT = helper.getType("commonj.sdo", "Object");
+ final public static Type SHORT = helper.getType("commonj.sdo", "Short");
+ final public static Type STRING = helper.getType("commonj.sdo", "String");
+ final public static Type STRINGS = helper.getType("commonj.sdo", "String");
+ final public static Type TIME = helper.getType("commonj.sdo", "Date");
+ final public static Type URI = helper.getType("commonj.sdo", "String");
+ final public static Type YEAR = helper.getType("commonj.sdo", "Date");
+ final public static Type YEARMONTH = helper.getType("commonj.sdo", "Date");
+ final public static Type YEARMONTHDAY = helper.getType("commonj.sdo", "Date");
+ final public static Type BOOLEANOBJECT = helper.getType("commonj.sdo", "BooleanObject");
+ final public static Type BYTEOBJECT = helper.getType("commonj.sdo", "ByteObject");
+ final public static Type CHARACTEROBJECT = helper.getType("commonj.sdo", "CharacterObject");
+ final public static Type DOUBLEOBJECT = helper.getType("commonj.sdo", "DoubleObject");
+ final public static Type FLOATOBJECT = helper.getType("commonj.sdo", "FloatObject");
+ final public static Type INTEGEROBJECT = helper.getType("commonj.sdo", "IntObject");
+ final public static Type LONGOBJECT = helper.getType("commonj.sdo", "LongObject");
+ final public static Type SHORTOBJECT = helper.getType("commonj.sdo", "ShortObject");
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
new file mode 100644
index 0000000000..b9c4dae0be
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
@@ -0,0 +1,411 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.config.wrapper;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Key;
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.KeyPair;
+import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.impl.ConfigFactoryImpl;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.Property;
+
+public class MappingWrapper {
+
+ private static final ConfigFactory factory = ConfigFactoryImpl.eINSTANCE;
+
+ private static final boolean debug = false;
+
+ private Config config;
+
+ public MappingWrapper() {
+ // Empty Constructor
+ }
+
+ public MappingWrapper(Config mapping) {
+ this.config = mapping;
+ }
+
+ public Config getConfig() {
+ return this.config;
+ }
+
+ public Table getTable(String name) {
+ if (config == null)
+ return null;
+ DebugUtil.debugln(getClass(), debug, "Looking for table " + name);
+ Iterator i = config.getTable().iterator();
+ while (i.hasNext()) {
+ Table t = (Table) i.next();
+ if (name.equals(t.getName()))
+ return t;
+ }
+
+ return null;
+ }
+
+ public Table getTableByPropertyName(String name) {
+ if (config == null)
+ return null;
+ DebugUtil.debugln(getClass(), debug, "Looking for table by property: " + name);
+ Iterator i = config.getTable().iterator();
+ while (i.hasNext()) {
+ Table t = (Table) i.next();
+ TableWrapper wrapper = new TableWrapper(t);
+ if (name.equals(wrapper.getPropertyName()))
+ return t;
+ }
+ return null;
+
+ // throw new RuntimeException("Table with property name " + name
+ // + " not found.");
+
+ }
+
+ public void addRelationship(String parentName, String childName) {
+
+ if (config == null)
+ config = factory.createConfig();
+
+ QualifiedColumn parent = new QualifiedColumn(parentName);
+ QualifiedColumn child = new QualifiedColumn(childName);
+
+ Relationship r = factory.createRelationship();
+ r.setName(child.getTableName());
+ r.setPrimaryKeyTable(parent.getTableName());
+ r.setForeignKeyTable(child.getTableName());
+ DebugUtil.debugln(getClass(), debug, "Created relationship from " + r.getPrimaryKeyTable() + " to "
+ + r.getForeignKeyTable() + " named " + r.getName());
+
+ KeyPair pair = factory.createKeyPair();
+ pair.setPrimaryKeyColumn(parent.getColumnName());
+ pair.setForeignKeyColumn(child.getColumnName());
+
+ r.getKeyPair().add(pair);
+ r.setMany(true);
+
+ config.getRelationship().add(r);
+
+ }
+
+ public void addRelationship(Key parentKey, Key childKey) {
+
+ if (config == null)
+ config = factory.createConfig();
+
+ QualifiedColumn parent = new QualifiedColumn((String) parentKey.getColumNames().get(0));
+ QualifiedColumn child = new QualifiedColumn((String) childKey.getColumNames().get(0));
+
+ Relationship r = factory.createRelationship();
+ r.setName(child.getTableName());
+ r.setPrimaryKeyTable(parent.getTableName());
+ r.setForeignKeyTable(child.getTableName());
+ DebugUtil.debugln(getClass(), debug, "Created relationship from " + r.getPrimaryKeyTable() + " to "
+ + r.getForeignKeyTable() + " named " + r.getName());
+
+ Iterator i = parentKey.getColumNames().iterator();
+ Iterator j = childKey.getColumNames().iterator();
+ while (i.hasNext() && j.hasNext()) {
+ parent = new QualifiedColumn((String) i.next());
+ child = new QualifiedColumn((String) j.next());
+ KeyPair pair = factory.createKeyPair();
+ pair.setPrimaryKeyColumn(parent.getColumnName());
+ pair.setForeignKeyColumn(child.getColumnName());
+
+ r.getKeyPair().add(pair);
+ }
+ r.setMany(true);
+ config.getRelationship().add(r);
+
+ }
+
+ public void addPrimaryKey(String columnName) {
+ Key k = new Key(columnName);
+ addPrimaryKey(k, false);
+ }
+
+ public void addPrimaryKey(Key key) {
+ addPrimaryKey(key, false);
+ }
+
+ public void addGeneratedPrimaryKey(String columnName) {
+ Key key = new Key(columnName);
+ addPrimaryKey(key, true);
+ }
+
+ private void addPrimaryKey(Key key, boolean generated) {
+ if (config == null)
+ config = factory.createConfig();
+
+ Iterator i = key.getColumNames().iterator();
+ while (i.hasNext()) {
+ String columnName = (String) i.next();
+
+ QualifiedColumn pkColumn = new QualifiedColumn(columnName);
+ Table t = findOrCreateTable(pkColumn.getTableName());
+ Column c = findOrCreateColumn(t, pkColumn.getColumnName());
+ c.setPrimaryKey(true);
+ if (generated)
+ c.setGenerated(true);
+ }
+ }
+
+ public String getTablePropertyName(String tableName) {
+ Table t = getTable(tableName);
+ if (t == null)
+ return tableName;
+ String propertyName = t.getPropertyName();
+
+ if (propertyName == null)
+ return tableName;
+
+ return propertyName;
+ }
+
+ public Column getColumn(Table t, String name) {
+ if (t == null)
+ return null;
+ Iterator i = t.getColumn().iterator();
+ while (i.hasNext()) {
+ Column c = (Column) i.next();
+ if (c.getName().equals(name)) {
+ return c;
+ }
+ }
+ DebugUtil
+ .debugln(getClass(), debug, "WARNING: Could not find column " + name + " in table " + t.getName());
+ return null;
+ }
+
+ public Column getColumnByPropertyName(Table t, String propertyName) {
+ if (t == null)
+ return null;
+ Iterator i = t.getColumn().iterator();
+ while (i.hasNext()) {
+ Column c = (Column) i.next();
+ if (c.getName().equals(propertyName))
+ return c;
+ if (c.getPropertyName() != null && c.getPropertyName().equals(propertyName))
+ return c;
+ }
+ DebugUtil.debugln(getClass(), debug, "WARNING: Could not find column " + propertyName + " in table "
+ + t.getName());
+ return null;
+ }
+
+ public String getColumnPropertyName(String tableName, String columnName) {
+ Table t = getTable(tableName);
+ Column c = getColumn(t, columnName);
+ if (c == null)
+ return columnName;
+
+ String propertyName = c.getPropertyName();
+ if (propertyName == null)
+ return c.getName();
+
+ return propertyName;
+ }
+
+ public void addCollisionColumn(String columnName) {
+
+ if (config == null)
+ config = factory.createConfig();
+
+ QualifiedColumn occColumn = new QualifiedColumn(columnName);
+ Table t = findOrCreateTable(occColumn.getTableName());
+ Column c = findOrCreateColumn(t, occColumn.getColumnName());
+ c.setCollision(true);
+
+ config.getTable().add(t);
+ }
+
+ public void addTable(String tableName, String propertyName) {
+ Table table = getTable(tableName);
+ if (table != null)
+ throw new Error("Table " + tableName + "already exists");
+
+ table = ConfigFactoryImpl.eINSTANCE.createTable();
+ table.setName(tableName);
+ table.setPropertyName(propertyName);
+ config.getTable().add(table);
+
+ }
+
+ private Table findOrCreateTable(String tableName) {
+ Table table = getTable(tableName);
+ if (table == null) {
+ table = ConfigFactoryImpl.eINSTANCE.createTable();
+ table.setName(tableName);
+ config.getTable().add(table);
+ }
+ return table;
+
+ }
+
+ private Column findOrCreateColumn(Table t, String name) {
+ Iterator i = t.getColumn().iterator();
+ while (i.hasNext()) {
+ Column c = (Column) i.next();
+ if (name.equals(c.getName()))
+ return c;
+ }
+
+ Column c = ConfigFactoryImpl.eINSTANCE.createColumn();
+ c.setName(name);
+ t.getColumn().add(c);
+ return c;
+ }
+
+ public boolean hasRecursiveRelationships() {
+ if (config != null) {
+ Iterator i = getConfig().getRelationship().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+ if (r.getPrimaryKeyTable().equals(r.getForeignKeyTable()))
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Collection getRelationshipsByChildTable(String name) {
+ ArrayList results = new ArrayList();
+ if (config != null) {
+ Iterator i = getConfig().getRelationship().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+ if (name.equals(r.getForeignKeyTable()))
+ results.add(r);
+ }
+ }
+ return results;
+ }
+
+ // TODO optimize
+ public ArrayList getInsertOrder() {
+ DebugUtil.debugln(getClass(), debug, "Getting insert order");
+ ArrayList inserts = new ArrayList();
+ HashMap parentToChild = new HashMap();
+
+ ArrayList parents = new ArrayList();
+ ArrayList children = new ArrayList();
+ if (config != null) {
+ Iterator i = getConfig().getRelationship().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+ parents.add(r.getPrimaryKeyTable());
+ children.add(r.getForeignKeyTable());
+ parentToChild.put(r.getPrimaryKeyTable(), r.getForeignKeyTable());
+ }
+
+ while (parents.size() > 0) {
+ String parent = (String) parents.get(0);
+ if (!children.contains(parent)) {
+ if (!inserts.contains(parent))
+ inserts.add(parent);
+
+ String child = (String) parentToChild.get(parent);
+ if (!inserts.contains(child))
+ inserts.add(child);
+
+ parents.remove(parent);
+ children.remove(child);
+ } else {
+ parents.add(parents.remove(0));
+ }
+ }
+ inserts.addAll(children);
+
+ }
+
+ DebugUtil.debugln(getClass(), debug, inserts);
+ return inserts;
+ }
+
+ public ArrayList getDeleteOrder() {
+ ArrayList deleteOrder = new ArrayList();
+ deleteOrder.addAll(getInsertOrder());
+ Collections.reverse(deleteOrder);
+ return deleteOrder;
+ }
+
+ public void addConverter(String name, String converter) {
+ if (config == null)
+ config = factory.createConfig();
+
+ QualifiedColumn column = new QualifiedColumn(name);
+ Table t = findOrCreateTable(column.getTableName());
+ Column c = findOrCreateColumn(t, column.getColumnName());
+ c.setConverterClassName(converter);
+
+ }
+
+ public String getConverter(String tableName, String columnName) {
+ Table t = getTable(tableName);
+ Column c = getColumn(t, columnName);
+ if (c != null)
+ return c.getConverterClassName();
+ return null;
+ }
+
+ public HashMap getConverters(Table table) {
+ HashMap converters = new HashMap();
+
+ Iterator columns = table.getColumn().iterator();
+ while (columns.hasNext()) {
+ Column c = (Column) columns.next();
+ if (c.getConverterClassName() != null) {
+ String property = c.getPropertyName();
+ if (property == null)
+ property = c.getName();
+ converters.put(property, c.getConverterClassName());
+ }
+ }
+ return converters;
+ }
+
+ public Relationship getRelationshipByReference(Property ref) {
+ Iterator i = config.getRelationship().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+ if (ref.getName().equals(r.getName()) || ref.getOpposite().getName().equals(r.getName()))
+ return r;
+ }
+ throw new RuntimeException("Could not find relationship " + ref.getName() + " in the configuration");
+ }
+
+ public Relationship getRelationshipByName(String name) {
+ Iterator i = config.getRelationship().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+ if (name.equals(r.getName()))
+ return r;
+ }
+ throw new RuntimeException("Could not find relationship " + name + " in the configuration");
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java
new file mode 100644
index 0000000000..6babe0c349
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java
@@ -0,0 +1,41 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.config.wrapper;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+public class QualifiedColumn {
+
+ private final String tableName;
+ private final String columnName;
+ private static boolean debug = false;
+
+ public QualifiedColumn(String name) {
+ tableName = name.substring(0, name.indexOf('.'));
+ columnName = name.substring(name.indexOf('.') + 1);
+ DebugUtil.debugln(getClass(), debug, tableName);
+ DebugUtil.debugln(getClass(), debug, columnName);
+ }
+
+ public String getTableName() {
+ return this.tableName;
+ }
+
+ public String getColumnName() {
+ return this.columnName;
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java
new file mode 100644
index 0000000000..14403367d8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java
@@ -0,0 +1,44 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.config.wrapper;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.config.KeyPair;
+import org.apache.tuscany.das.rdb.config.Relationship;
+
+public class RelationshipWrapper {
+
+ private Relationship relationship;
+
+ public RelationshipWrapper(Relationship r) {
+ this.relationship = r;
+ }
+
+ public Collection getForeignKeys() {
+ ArrayList keys = new ArrayList();
+ Iterator i = this.relationship.getKeyPair().iterator();
+ while ( i.hasNext()) {
+ KeyPair pair = (KeyPair) i.next();
+ keys.add(pair.getForeignKeyColumn());
+ }
+ return keys;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java
new file mode 100644
index 0000000000..2c2d1dc677
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java
@@ -0,0 +1,124 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.config.wrapper;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Table;
+
+public class TableWrapper {
+
+ private Table table;
+
+ public TableWrapper(Table table) {
+ this.table = table;
+ }
+
+ public String getPropertyName() {
+ return table.getPropertyName() == null ? table.getName() : table
+ .getPropertyName();
+ }
+
+ public Collection getPrimaryKeyNames() {
+ ArrayList pkNames = new ArrayList();
+ Iterator i = table.getColumn().iterator();
+ while (i.hasNext()) {
+ Column c = (Column) i.next();
+ if (c.isPrimaryKey())
+ pkNames.add(c.getName());
+ }
+ return pkNames;
+ }
+
+ public Collection getPrimaryKeyProperties() {
+
+ ArrayList keyProperties = new ArrayList();
+ Iterator columns = table.getColumn().iterator();
+ while (columns.hasNext()) {
+ Column c = (Column) columns.next();
+ if (c.isPrimaryKey()) {
+ keyProperties.add(getColumnPropertyName(c));
+ }
+ }
+
+ return keyProperties;
+ }
+
+ private String getColumnPropertyName(Column c) {
+ if (c.getPropertyName() != null)
+ return c.getPropertyName();
+ else
+ return c.getName();
+ }
+
+ public boolean isGeneratedColumnProperty(String name) {
+ Column c = getColumnByPropertyName(name);
+ return c == null ? false : c.isGenerated();
+ }
+
+ // public Object getColumnNameByProperty(String propertyName) {
+ // Iterator i = table.getColumn().iterator();
+ // while (i.hasNext()) {
+ // Column c = (Column) i.next();
+ // if (propertyName.equals(c.getPropertyName()))
+ // return c.getName();
+ // }
+ // return propertyName;
+ // }
+
+ public String getConverter(String propertyName) {
+ Column c = getColumnByPropertyName(propertyName);
+ return (c == null) ? null : c.getConverterClassName();
+ }
+
+ public Column getColumnByPropertyName(String propertyName) {
+ Iterator columns = table.getColumn().iterator();
+ while (columns.hasNext()) {
+ Column c = (Column) columns.next();
+ String property = c.getPropertyName();
+ if (property == null)
+ property = c.getName();
+ if (propertyName.equals(property))
+ return c;
+ }
+
+ return null;
+ }
+
+ public Column getCollisionColumn() {
+ Iterator columns = table.getColumn().iterator();
+ while (columns.hasNext()) {
+ Column c = (Column) columns.next();
+ if ( c.isCollision() )
+ return c;
+ }
+
+ return null;
+
+ }
+
+ public String getCollisionColumnPropertyName() {
+ Column c = getCollisionColumn();
+ if ( c.getPropertyName() != null )
+ return c.getPropertyName();
+ else
+ return c.getName();
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java
new file mode 100644
index 0000000000..411104fa3f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/CudGenerator.java
@@ -0,0 +1,64 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.generator.impl;
+
+import java.util.Collection;
+
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.impl.DeleteCommandImpl;
+import org.apache.tuscany.das.rdb.impl.InsertCommandImpl;
+import org.apache.tuscany.das.rdb.impl.UpdateCommandImpl;
+
+import commonj.sdo.DataObject;
+
+public class CudGenerator {
+
+ private static final UpdateGenerator updateGenerator = UpdateGenerator.instance;
+
+ private static final InsertGenerator insertGenerator = InsertGenerator.instance;
+
+ private static final DeleteGenerator deleteGenerator = DeleteGenerator.instance;
+
+ public DeleteCommandImpl getDeleteCommand(Table t) {
+ return deleteGenerator.getDeleteCommand(t);
+ }
+
+ public Collection getDeleteParameters(Table table) {
+ return deleteGenerator.getDeleteParameters(table);
+ }
+
+ public Collection getCreateParameters(MappingWrapper mapping, DataObject changedObject, Table table) {
+ return insertGenerator.getInsertParameters(mapping, changedObject, table);
+ }
+
+ public InsertCommandImpl getInsertCommand(MappingWrapper mapping, DataObject changedObject,
+ Table table) {
+ return insertGenerator.getInsertCommand(mapping, changedObject, table);
+ }
+
+ public UpdateCommandImpl getUpdateCommand(MappingWrapper mapping,
+ DataObject changedObject, Table table) {
+ return updateGenerator.getUpdateCommand(mapping, changedObject, table);
+ }
+
+ public Collection getUpdateParameters(DataObject changedObject, Table table) {
+ return updateGenerator.getUpdateParameters(changedObject, table);
+ }
+
+}
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java
new file mode 100644
index 0000000000..c2d312b56d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java
@@ -0,0 +1,98 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.generator.impl;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Converter;
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
+import org.apache.tuscany.das.rdb.impl.DeleteCommandImpl;
+import org.apache.tuscany.das.rdb.impl.ParameterImpl;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+public class DeleteGenerator {
+
+ public static final DeleteGenerator instance = new DeleteGenerator();
+
+ private static final boolean debug = false;
+
+ public DeleteGenerator() {
+ super();
+ }
+
+ public String getDeleteStatement(Table t) {
+ TableWrapper table = new TableWrapper(t);
+
+ StringBuffer statement = new StringBuffer();
+ statement.append("delete from ");
+ statement.append(t.getName());
+ statement.append(" where ");
+
+ Iterator names = table.getPrimaryKeyNames().iterator();
+ Iterator properties = table.getPrimaryKeyProperties().iterator();
+ while (names.hasNext() && properties.hasNext()) {
+ String name = (String) names.next();
+ statement.append(name);
+ statement.append(" = ?");
+ if (names.hasNext() && properties.hasNext())
+ statement.append(" and ");
+ }
+
+ DebugUtil.debugln(getClass(), debug, statement.toString());
+ return statement.toString();
+ }
+
+ public Collection getDeleteParameters(Table table) {
+ TableWrapper wrapper = new TableWrapper(table);
+ return wrapper.getPrimaryKeyProperties();
+ }
+
+ public DeleteCommandImpl getDeleteCommand(Table t) {
+ DeleteCommandImpl deleteCommand = new DeleteCommandImpl(getDeleteStatement(t));
+
+ Iterator i = getDeleteParameters(t).iterator();
+ for(int idx=1; i.hasNext(); idx++) {
+ String property = (String) i.next();
+ Parameter p = new ParameterImpl();
+ p.setName(property);
+ p.setType(SDODataTypes.OBJECT);
+ p.setConverter(getConverter(t, property));
+ p.setIndex(idx);
+ deleteCommand.addParameter(p);
+ }
+ return deleteCommand;
+ }
+
+ private Converter getConverter(Table t, String name) {
+ TableWrapper tw = new TableWrapper(t);
+ String converter = tw.getConverter(name);
+ if ( converter != null ) {
+ try {
+ return (Converter) Class.forName(converter).newInstance();
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ return null;
+ }
+
+}
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
new file mode 100644
index 0000000000..5653b23aa2
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
@@ -0,0 +1,179 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.generator.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Converter;
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.RelationshipWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
+import org.apache.tuscany.das.rdb.impl.InsertCommandImpl;
+import org.apache.tuscany.das.rdb.impl.ParameterImpl;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+
+public class InsertGenerator {
+
+ public static final InsertGenerator instance = new InsertGenerator();
+
+ private static final boolean debug = false;
+
+ public InsertGenerator() {
+ super();
+ }
+
+ public InsertCommandImpl getInsertCommand(MappingWrapper config,
+ DataObject changedObject, Table t) {
+ ArrayList parameters = new ArrayList();
+ TableWrapper table = new TableWrapper(t);
+ StringBuffer statement = new StringBuffer("insert into ");
+ statement.append(t.getName());
+
+ Iterator i = getAttributeProperties(changedObject, config).iterator();
+
+ ArrayList attributes = new ArrayList();
+ while (i.hasNext()) {
+ Property attr = (Property) i.next();
+ if (!table.isGeneratedColumnProperty(attr.getName())) {
+ attributes.add(attr.getName());
+ parameters.add(changedObject.getType().getProperty(
+ attr.getName()));
+ }
+ }
+
+ statement.append("(");
+ Iterator attrs = attributes.iterator();
+ while (attrs.hasNext()) {
+ String name = (String) attrs.next();
+ statement.append("");
+ statement.append(name);
+ if (attrs.hasNext())
+ statement.append(", ");
+ else
+ statement.append(")");
+ }
+
+ statement.append(" values (");
+ for (int idx = 1; idx <= attributes.size(); idx++) {
+ statement.append('?');
+ if (idx < attributes.size())
+ statement.append(", ");
+ else
+ statement.append(")");
+ }
+
+ InsertCommandImpl cmd = new InsertCommandImpl(statement.toString());
+ Iterator params = parameters.iterator();
+ for (int idx = 1; params.hasNext(); idx++) {
+ Property property = (Property) params.next();
+ Parameter p = new ParameterImpl();
+ p.setName(property.getName());
+ p.setType(property.getType());
+ p.setConverter(getConverter(table, property.getName()));
+ p.setIndex(idx);
+ cmd.addParameter(p);
+
+ }
+ DebugUtil.debugln(getClass(), debug, statement.toString());
+ return cmd;
+
+ }
+
+ private Converter getConverter(TableWrapper tw, String name) {
+ String converter = tw.getConverter(name);
+ if ( converter != null ) {
+ try {
+ return (Converter) Class.forName(converter).newInstance();
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ return null;
+ }
+
+ private List getAttributeProperties(DataObject obj, MappingWrapper config) {
+ ArrayList fields = new ArrayList();
+ Iterator i = obj.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property p = (Property) i.next();
+ if (p.getType().isDataType()) {
+ if (obj.isSet(p))
+ fields.add(p);
+ } else {
+ if ( obj.isSet(p) ) {
+ Relationship relationship = config.getRelationshipByReference(p);
+ if ( p.getOpposite().isMany() || (hasState(config, relationship, obj))) {
+ RelationshipWrapper r = new RelationshipWrapper(
+ relationship);
+ Iterator keys = r.getForeignKeys().iterator();
+ while (keys.hasNext()) {
+ String key = (String) keys.next();
+ Property keyProp = obj.getType().getProperty(key);
+ fields.add(keyProp);
+ }
+ }
+
+ }
+ }
+ }
+
+ return fields;
+
+ }
+
+ public Collection getInsertParameters(MappingWrapper config,
+ DataObject changedObject, Table table) {
+ ArrayList parameters = new ArrayList();
+ TableWrapper wrapper = new TableWrapper(table);
+
+ Iterator i = getAttributeProperties(changedObject, config).iterator();
+
+ while (i.hasNext()) {
+ Property attr = (Property) i.next();
+ if (!wrapper.isGeneratedColumnProperty(attr.getName()))
+ parameters.add(changedObject.getType().getProperty(
+ attr.getName()));
+ }
+
+ return parameters;
+ }
+
+ private boolean hasState(MappingWrapper config, Relationship rel, DataObject changedObject) {
+
+ if ( !rel.isMany()) {
+ Table t = config.getTableByPropertyName(changedObject.getType().getName());
+ TableWrapper tw = new TableWrapper(t);
+ RelationshipWrapper rw = new RelationshipWrapper(rel);
+ if (( rel.getForeignKeyTable().equals(t.getName())) &&
+ ( Collections.disjoint(tw.getPrimaryKeyProperties(),rw.getForeignKeys()) ))
+ return true;
+ }
+
+ return false;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
new file mode 100644
index 0000000000..3243ba2388
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
@@ -0,0 +1,206 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.generator.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Converter;
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.RelationshipWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
+import org.apache.tuscany.das.rdb.impl.OptimisticWriteCommandImpl;
+import org.apache.tuscany.das.rdb.impl.ParameterImpl;
+import org.apache.tuscany.das.rdb.impl.UpdateCommandImpl;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.ChangeSummary;
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+
+public class UpdateGenerator {
+
+ private boolean debug = false;
+
+ public static UpdateGenerator instance = new UpdateGenerator();
+
+ public UpdateGenerator() {
+ super();
+ }
+
+ public UpdateCommandImpl getUpdateCommand(MappingWrapper mapping, DataObject changedObject, Table table) {
+ ArrayList parameters = new ArrayList();
+ Type type = changedObject.getType();
+ TableWrapper t = new TableWrapper(table);
+ StringBuffer statement = new StringBuffer("update ");
+ statement.append(table.getName());
+ statement.append(" set ");
+
+
+ ChangeSummary summary = changedObject.getDataGraph().getChangeSummary();
+ Iterator i = getChangedFields(mapping, summary, changedObject).iterator();
+
+ while (i.hasNext()) {
+ Property attr = (Property) i.next();
+ Column c = t.getColumnByPropertyName(attr.getName());
+ if ((c != null) && (c.isCollision() || c.isPrimaryKey())) {
+ // get rid of comma if OCC or PK is last field
+ if (!i.hasNext()) {
+ statement
+ .delete(statement.length() - 2, statement.length());
+ }
+ } else {
+ parameters.add(attr);
+ statement.append(c == null ? attr.getName() : c.getName());
+ statement.append(" = ?");
+ if (i.hasNext())
+ statement.append(", ");
+ }
+ }
+
+ statement.append(" where ");
+
+ Iterator names = t.getPrimaryKeyNames().iterator();
+ Iterator properties = t.getPrimaryKeyProperties().iterator();
+ while (names.hasNext() && properties.hasNext()) {
+ String name = (String) names.next();
+ String property = (String) properties.next();
+ statement.append(name);
+ statement.append(" = ?");
+ if (names.hasNext() && properties.hasNext())
+ statement.append(" and ");
+ parameters.add(type.getProperty(property));
+ }
+
+ if (t.getCollisionColumn() != null) {
+ statement.append(" and ");
+ statement.append(t.getCollisionColumn().getName());
+ statement.append(" = ?");
+ parameters.add(type.getProperty(t.getCollisionColumnPropertyName()));
+ }
+
+
+ UpdateCommandImpl updateCommand;
+ if ( t.getCollisionColumn() != null )
+ updateCommand = new OptimisticWriteCommandImpl(statement.toString());
+ else
+ updateCommand = new UpdateCommandImpl(statement.toString());
+
+ Iterator params = parameters.iterator();
+ for (int idx = 1; params.hasNext(); idx++ ) {
+ Property p = (Property)params.next();
+ Parameter param = new ParameterImpl();
+ param.setName(p.getName());
+ param.setType(p.getType());
+ param.setConverter(getConverter(t, p.getName()));
+ param.setIndex(idx);
+ updateCommand.addParameter(param);
+ }
+ DebugUtil.debugln(getClass(), debug, statement.toString());
+ return updateCommand;
+ }
+
+ private List getAttributeProperties(DataObject obj) {
+ ArrayList fields = new ArrayList();
+ Iterator i = obj.getType().getProperties().iterator();
+ while ( i.hasNext() ) {
+ Property p = (Property) i.next();
+ if ( p.getType().isDataType())
+ fields.add(p);
+ }
+ return fields;
+ }
+
+
+ private List getChangedFields(MappingWrapper mapping, ChangeSummary summary, DataObject obj) {
+ ArrayList changes = new ArrayList();
+ Iterator i = summary.getOldValues(obj).iterator();
+ while (i.hasNext()) {
+ ChangeSummary.Setting setting = (ChangeSummary.Setting) i.next();
+ if (setting.getProperty().getType().isDataType()) {
+ changes.add(setting.getProperty());
+ } else {
+ Property ref = setting.getProperty();
+ if ( !ref.isMany() ) {
+ RelationshipWrapper r = new RelationshipWrapper(mapping.getRelationshipByReference(ref));
+
+ Iterator keys = r.getForeignKeys().iterator();
+ while ( keys.hasNext()) {
+ String key = (String) keys.next();
+ Property p = obj.getType().getProperty(key);
+ changes.add(p);
+ }
+ }
+
+ }
+ }
+ return changes;
+ }
+
+
+ private Converter getConverter(TableWrapper tw, String name) {
+ String converter = tw.getConverter(name);
+ if ( converter != null ) {
+ try {
+ return (Converter) Class.forName(converter).newInstance();
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ return null;
+ }
+
+ public Collection getUpdateParameters(DataObject changedObject, Table table) {
+ Type type = changedObject.getType();
+ TableWrapper wrapper = new TableWrapper(table);
+ Collection pkNames = wrapper.getPrimaryKeyProperties();
+ ArrayList parameters = new ArrayList();
+ ArrayList pkParams = new ArrayList();
+
+ Iterator i = getAttributeProperties(changedObject).iterator();
+ while (i.hasNext()) {
+ Property attr = (Property) i.next();
+ String field = attr.getName();
+
+ Parameter p = getParameter(wrapper, type.getProperty(field));
+ if (pkNames.contains(field)) {
+ pkParams.add(p);
+ } else {
+ parameters.add(p);
+ }
+ }
+ parameters.addAll(pkParams);
+ return parameters;
+
+ }
+
+ private Parameter getParameter(TableWrapper wrapper, Property property) {
+ Parameter param = new ParameterImpl();
+ param.setName(property.getName());
+ param.setType(property.getType());
+ param.setConverter(getConverter(wrapper, property.getName()));
+
+ return param;
+ }
+}
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java
new file mode 100644
index 0000000000..2d58c0f269
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java
@@ -0,0 +1,120 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+import commonj.sdo.helper.DataFactory;
+
+public class DataObjectMaker {
+
+ private final DataObject rootObject;
+
+ private boolean debug = false;
+
+ public DataObjectMaker(DataObject root) {
+ this.rootObject = root;
+ }
+
+ /**
+ * @param tableData
+ * @return
+ */
+ public DataObject createAndAddDataObject(TableData tableData,
+ ResultMetadata resultMetadata) {
+ // Get a Type from the package and create a standalone DataObject
+
+ DebugUtil.debugln(getClass(), this.debug, "Looking for Type for "
+ + tableData.getTableName());
+
+ Type tableClass = findTableTypeByPropertyName(tableData.getTableName());
+
+ if (tableClass == null)
+ throw new RuntimeException("An SDO Type with name "
+ + tableData.getTableName() + " was not found");
+
+ DataObject obj = DataFactory.INSTANCE.create(tableClass);
+
+ // Now, check to see if the root data object has a containment reference
+ // to this EClass. If so, add it to the graph. If not, it will be taken
+ // care
+ // of when we process relationships
+
+ Iterator i = this.rootObject.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property p = (Property) i.next();
+
+ if (p.isContainment() && p.getType().equals(tableClass)) {
+ if (p.isMany())
+ rootObject.getList(p).add(obj);
+ // TODO This was a performance optimization for EMF in SDO 1.1,
+ // check to see if there is
+ // something equivalent in SDO 2.0
+ // ((InternalEList) this.dataGraph.eGet(ref)).addUnique(obj);
+ else
+ this.rootObject.set(p, obj);
+ }
+
+ }
+
+ Iterator columnNames = resultMetadata.getColumnNames(
+ tableData.getTableName()).iterator();
+ while (columnNames.hasNext()) {
+ String columnName = (String) columnNames.next();
+ DataObject dataObject = (DataObject) obj;
+ Property p = findProperty(dataObject.getType(), columnName);
+ Object value = tableData.getColumnData(columnName);
+
+ dataObject.set(p, value);
+ }
+
+ return obj;
+ }
+
+ // temporary, ignoring case
+ private Property findProperty(Type type, String columnName) {
+ Iterator properties = type.getProperties().iterator();
+ while (properties.hasNext()) {
+ Property p = (Property) properties.next();
+ if (columnName.equalsIgnoreCase(p.getName()))
+ return p;
+ }
+ return null;
+ }
+
+ private Type findTableTypeByPropertyName(String tableName) {
+ Iterator i = rootObject.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property p = (Property) i.next();
+ // System.out.println(p.getType().getName());
+ if (tableName.equals(p.getType().getName()))
+ return p.getType();
+ }
+
+ return null;
+ }
+
+ private Type findTableTypeByRootReference(String refName) {
+ return rootObject.getProperty(refName).getType();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java
new file mode 100644
index 0000000000..54c536d95c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java
@@ -0,0 +1,91 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.sql.Blob;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+
+public class DefaultConverter implements Converter {
+
+ public DefaultConverter() {
+ super();
+ }
+
+ public Object getColumnValue(Object data) {
+ return data;
+ }
+
+ public Object getPropertyValue(Object data) {
+// if (type.isInstance(data))
+// return data;
+//
+// if ( data == null )
+// return null;
+//
+// String name = type.getInstanceClass().getName();
+// if (name == "java.lang.Byte" || name == "byte") {
+// return new Byte(data.toString());
+// }
+//
+// else if (name == "java.lang.Double" || name == "double") {
+// return new Double(data.toString());
+// }
+//
+// else if (name == "java.lang.Float" || name == "float") {
+// return new Float(data.toString());
+// }
+//
+// else if (name == "java.lang.Integer" || name == "int") {
+// return new Integer(data.toString());
+// }
+//
+// else if (name == "java.lang.Long" || name == "long") {
+// return new Long(data.toString());
+// }
+//
+// else if (name == "java.lang.Short" || name == "short") {
+// return new Short(data.toString());
+// }
+//
+// else if (name == "java.lang.String") {
+// return String.valueOf(data.toString());
+// }
+
+ if ( data instanceof Blob ) {
+ Blob b = (Blob) data;
+ try {
+ return b.getBytes(1, (int)b.length());
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ } else {
+ return data;
+ }
+
+
+
+// else {
+//
+// throw new IllegalArgumentException("The database value of type "
+// + data.getClass().getName() + " must be converted to type "
+// + type.getInstanceClass().getName());
+// }
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java
new file mode 100644
index 0000000000..6247dea757
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java
@@ -0,0 +1,98 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.ResultSetShape;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.graphbuilder.schema.ESchemaMaker;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.Type;
+
+
+/**
+ */
+public class GraphBuilderMetadata {
+
+ private Config mappingModel;
+ private final Collection resultSets = new ArrayList();
+ private boolean debug = false;
+ private Type schema;
+
+
+ public GraphBuilderMetadata(Collection results, Type schema, Config model, ResultSetShape shape) throws SQLException {
+ this.mappingModel = model;
+ this.schema = schema;
+
+ Iterator i = results.iterator();
+ while (i.hasNext()) {
+ ResultSet rs = (ResultSet) i.next();
+ ResultMetadata resultMetadata = new ResultMetadata(rs, mappingModel, shape);
+ resultSets.add(resultMetadata);
+ }
+
+ DebugUtil.debugln(getClass(), debug, "Mapping model: " + mappingModel);
+ }
+
+
+ public Collection getResultMetadata() {
+ return this.resultSets;
+ }
+
+
+ public boolean hasMappingModel() {
+ return mappingModel == null ? false : true;
+ }
+
+
+ /**
+ * @return
+ */
+
+ public Collection getRelationships() {
+ if (!hasMappingModel()) {
+ DebugUtil.debugln(getClass(), debug, "No relationships to return");
+ return Collections.EMPTY_LIST;
+ }
+
+ return mappingModel.getRelationship();
+ }
+
+
+ /**
+ * @return
+ */
+ public Type getSchema() {
+ if ( this.schema == null ) {
+ ESchemaMaker schemaMaker = new ESchemaMaker(this);
+ return schemaMaker.createTypes();
+ } else {
+ return this.schema;
+ }
+ }
+
+ public Config getMapping() {
+ return this.mappingModel;
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java
new file mode 100644
index 0000000000..142aee5c60
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java
@@ -0,0 +1,105 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+
+
+
+/**
+ *
+ * Used to store and look up table objects based on primary key
+ * This could be a lot more efficient if we could use LinkedHashMap from JDK 1.4
+ */
+public class MultiTableRegistry implements TableRegistry {
+
+ private HashMap tableNameMap;
+ private HashMap tableValueMap;
+ private boolean debug = false;
+
+
+ public MultiTableRegistry() {
+ tableNameMap = new HashMap();
+ tableValueMap = new HashMap();
+ }
+
+
+
+ /**
+ * Get the table with the specified name and primary key
+ * @param tableName
+ * @param primaryKey
+ * @return EDataObject
+ */
+ public DataObject get(String tableName, List primaryKey) {
+ if ( debug ) {
+ DebugUtil.debugln(getClass(), debug, "Looking for table " + tableName + " with PK " + primaryKey);
+ DebugUtil.debugln(getClass(), debug, ("\tReturning " + getPkMap(tableName).get(primaryKey)));
+ }
+ return (DataObject) getPkMap(tableName).get(primaryKey);
+ }
+
+ /**
+ * Add the table with the specified name and primary key
+ * @param tableName
+ * @param primaryKey
+ * @param value
+ */
+ public void put(String tableName, List primaryKey, DataObject value) {
+ if ( getPkMap(tableName).put(primaryKey, value) == null )
+ getCreateValueList(tableName).add(value);
+ }
+
+ /**
+ * Get the HashMap that contains the primary key to table object
+ * mappings.
+ * @param tableName
+ * @return HashMap
+ */
+ private HashMap getPkMap(String tableName) {
+ HashMap pkMap = (HashMap)tableNameMap.get(tableName);
+ if ( pkMap == null ) {
+ pkMap = new HashMap();
+ tableNameMap.put(tableName, pkMap);
+ }
+ return pkMap;
+ }
+
+ private List getCreateValueList(String tableName) {
+ List values = (List) tableValueMap.get(tableName);
+ if ( values == null ) {
+ values = new ArrayList();
+ tableValueMap.put(tableName, values);
+ }
+ return values;
+ }
+
+
+
+ public boolean contains(String tableName, List primaryKey) {
+ return get(tableName,primaryKey) == null ? false : true;
+
+ }
+
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java
new file mode 100644
index 0000000000..04c873db13
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java
@@ -0,0 +1,293 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Converter;
+import org.apache.tuscany.das.rdb.ResultSetShape;
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.Type;
+
+public class ResultMetadata {
+
+ private HashMap tableToColumnMap = new HashMap();
+
+ private ArrayList tablePropertyNames = new ArrayList();
+
+ private ArrayList columnPropertyNames = new ArrayList();
+
+ private final ResultSet resultSet;
+
+ private final ResultSetShape resultSetShape;
+
+ private final MappingWrapper mappingWrapper;
+
+ private Converter[] converters;
+
+ private static boolean debug = false;
+
+ public ResultMetadata(ResultSet rs, Config model, ResultSetShape shape)
+ throws SQLException {
+ debug("Creating new ResultMetadata with mapping model " + model);
+ this.resultSet = rs;
+ this.mappingWrapper = new MappingWrapper(model);
+
+ if (shape == null)
+ this.resultSetShape = new ResultSetShape(rs.getMetaData());
+ else
+ this.resultSetShape = shape;
+
+ this.converters = new Converter[resultSetShape.getColumnCount()];
+
+ for (int i = 1; i <= resultSetShape.getColumnCount(); i++) {
+ String tableName = resultSetShape.getTableName(i);
+
+ String tableProperty = mappingWrapper
+ .getTablePropertyName(tableName);
+ String columnProperty = mappingWrapper.getColumnPropertyName(
+ tableName, resultSetShape.getColumnName(i));
+ String converter = mappingWrapper.getConverter(tableName,
+ resultSetShape.getColumnName(i));
+ if (converter != null) {
+
+ try {
+
+ Class converterClazz= Class.forName(converter, true, Thread.currentThread().getContextClassLoader());
+ if(null != converterClazz)
+ converters[i - 1]= (Converter) converterClazz.newInstance();
+
+ }catch( Exception e){
+ //try loading below....
+ converters[i - 1]= null; //safety
+ }
+
+
+ if(null == converters[i - 1] )
+ try{
+
+
+ Converter convInstance = (Converter) Class.forName(
+ converter).newInstance();
+ converters[i - 1] = convInstance;
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+
+ } else {
+ // TODO make static
+ converters[i - 1] = new DefaultConverter();
+ }
+ DebugUtil.debugln(getClass(), debug, "Adding table/column: "
+ + tableProperty + "/" + columnProperty);
+ tablePropertyNames.add(tableProperty);
+ columnPropertyNames.add(columnProperty);
+
+ Collection columns = (Collection) tableToColumnMap
+ .get(tableProperty);
+ if (columns == null)
+ columns = new ArrayList();
+ columns.add(columnProperty);
+ tableToColumnMap.put(tableProperty, columns);
+ }
+
+ // Add any tables defined in the model but not included in the ResultSet
+ // to the list of propertyNames
+ if (model != null) {
+ Iterator tablesFromModel = model.getTable().iterator();
+ while (tablesFromModel.hasNext()) {
+ TableWrapper t = new TableWrapper((Table) tablesFromModel
+ .next());
+ if (tableToColumnMap.get(t.getPropertyName()) == null)
+ tableToColumnMap.put(t.getPropertyName(),
+ Collections.EMPTY_LIST);
+ }
+ }
+
+ if (debug) {
+ DebugUtil.debugln(getClass(), debug, toString());
+ DebugUtil
+ .debugln(getClass(), debug, this.resultSetShape.toString());
+ }
+
+ }
+
+ private void debug(Object string) {
+ if (debug)
+ DebugUtil.debugln(getClass(), debug, string);
+ }
+
+ public Collection getColumnNames() {
+ return columnPropertyNames;
+ }
+
+ public String getColumnPropertyName(int i) {
+ return (String) columnPropertyNames.get(i - 1);
+ }
+
+ public String getDatabaseColumnName(int i) {
+ return resultSetShape.getColumnName(i);
+ }
+
+ public String getTableName(String columnName) {
+ return (String) tablePropertyNames.get(columnPropertyNames
+ .indexOf(columnName));
+ }
+
+ public int getTableSize(String tableName) {
+ return ((Collection) tableToColumnMap.get(tableName)).size();
+ }
+
+ public Type getDataType(String columnName) {
+ return resultSetShape.getColumnType(columnPropertyNames
+ .indexOf(columnName));
+ }
+
+ public String getTablePropertyName(int i) {
+ return (String) tablePropertyNames.get(i - 1);
+ }
+
+ public Collection getAllTablePropertyNames() {
+ return tableToColumnMap.keySet();
+ }
+
+ public String toString() {
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (Table Names: ");
+ Iterator i = tablePropertyNames.iterator();
+ while (i.hasNext()) {
+ String tableName = (String) i.next();
+ result.append(' ');
+ result.append(tableName);
+ result.append(',');
+ }
+
+ result.append(" columnNames: ");
+
+ i = columnPropertyNames.iterator();
+ while (i.hasNext()) {
+ String columnName = (String) i.next();
+ result.append(' ');
+ result.append(columnName);
+ result.append(',');
+ }
+
+ result.append(" mappingModel: ");
+ result.append(this.mappingWrapper.getConfig());
+
+ result.append(" resultSet: ");
+ result.append(resultSet);
+
+ result.append(" resultSetSize: ");
+ result.append(resultSetShape.getColumnCount());
+ result.append(')');
+ return result.toString();
+
+ }
+
+ /**
+ * @return
+ */
+ public int getNumberOfTables() {
+ return tableToColumnMap.keySet().size();
+ }
+
+ /**
+ * Return whether the column at the given position is part of a primary key.
+ * If we don't have this information, we assume every column is a primary
+ * key. This results in uniqueness checks using all columns in a table.
+ *
+ * @param i
+ * @return
+ */
+ public boolean isPKColumn(int i) {
+ if (debug) {
+ DebugUtil.debugln(getClass(), debug, "Checking to see if "
+ + getColumnPropertyName(i) + " is a PK column in "
+ + getTablePropertyName(i));
+ }
+ if (!hasMappingModel()) {
+ if (debug)
+ DebugUtil
+ .debugln(getClass(), debug,
+ "No mapping model exists, all columns will be considered PK columns");
+ return true;
+ } else {
+ Table t = mappingWrapper.getTable(getTablePropertyName(i));
+ if (t == null)
+ return true;
+ Column c = mappingWrapper.getColumn(t, getDatabaseColumnName(i));
+
+ if (c == null)
+ return false;
+
+ if (c.isPrimaryKey())
+ return true;
+ }
+ return false;
+ }
+
+ public boolean hasMappingModel() {
+ return mappingWrapper.getConfig() == null ? false : true;
+ }
+
+ /**
+ * @param i
+ * @return
+ */
+ public Type getDataType(int i) {
+ return resultSetShape.getColumnType(i);
+ }
+
+ /**
+ * @param tableName
+ * @return
+ */
+ public Collection getColumnNames(String tableName) {
+ return (Collection) tableToColumnMap.get(tableName);
+ }
+
+ public ResultSet getResultSet() {
+ return this.resultSet;
+ }
+
+ public int getResultSetSize() {
+ return resultSetShape.getColumnCount();
+ }
+
+ public boolean isRecursive() {
+ return mappingWrapper.hasRecursiveRelationships();
+ }
+
+ public Converter getConverter(int i) {
+ return converters[i - 1];
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java
new file mode 100644
index 0000000000..8ccc0aee12
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java
@@ -0,0 +1,137 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+
+/**
+ *
+ * A ResultSetProcessor is used to transform the data in a ResultSet into a set
+ * of inter-related EDataObjects.
+ */
+public class ResultSetProcessor {
+
+ private TableRegistry registry;
+
+ private GraphBuilderMetadata metadata;
+
+ private boolean debug = false;
+
+ private final DataObjectMaker doMaker;
+
+ public ResultSetProcessor(DataObject g, GraphBuilderMetadata gbmd) {
+
+ this.metadata = gbmd;
+ if (metadata.getRelationships().size() == 0)
+ registry = new SingleTableRegistry();
+ else
+ registry = new MultiTableRegistry();
+
+ doMaker = new DataObjectMaker(g);
+
+ debug(metadata);
+
+ }
+
+ private void debug(Object output) {
+ DebugUtil.debugln(getClass(), debug, output);
+ }
+
+ /**
+ * Process the ResultSet. For each row in the ResultSet, a
+ *
+ * @link ResultSetRow object will be created to represent the row as a set
+ * of EDataObjects. Then, the relevant relationships will be
+ * constructed between each object in the
+ * @link ResultSetRow.
+ *
+ * @param rs
+ * The ResultSet
+ */
+ public void processResults(int start, int end) throws SQLException {
+
+ Iterator i = metadata.getResultMetadata().iterator();
+ while ( i.hasNext()) {
+ ResultMetadata resultMetadata = (ResultMetadata)i.next();
+ ResultSet results = resultMetadata.getResultSet();
+
+ processResultSet(results, resultMetadata, start, end);
+
+ //TODO These statements HAVE to be closed or we will have major problems
+ //results.getStatement().close();
+ results.close();
+ }
+
+ }
+
+
+ private void processResultSet(ResultSet rs, ResultMetadata rsMetadata,
+ int start, int end) throws SQLException {
+
+ if ( rs.getType() == ResultSet.TYPE_FORWARD_ONLY) {
+ while (rs.next() && start < end) {
+ ResultSetRow rsr = new ResultSetRow(rs, rsMetadata);
+ addRowToGraph(rsr, rsMetadata);
+ ++start;
+ }
+ } else {
+ while (rs.absolute(start) && start < end) {
+ ResultSetRow rsr = new ResultSetRow(rs, rsMetadata);
+ addRowToGraph(rsr, rsMetadata);
+ ++start;
+ }
+ }
+ }
+
+ /**
+ * @param row
+ * @param resultMetadata
+ */
+ private void addRowToGraph(ResultSetRow row, ResultMetadata resultMetadata) {
+ RowObjects tableObjects = new RowObjects(metadata, registry);
+ Iterator tables = row.getAllTableData().iterator();
+ while (tables.hasNext()) {
+ TableData rawDataFromRow = (TableData) tables.next();
+
+ if ( (resultMetadata.hasMappingModel()) && (!rawDataFromRow.hasValidPrimaryKey() ) )
+ continue;
+
+ String tableName = rawDataFromRow.getTableName();
+ DataObject tableObject = registry.get(tableName, rawDataFromRow
+ .getPrimaryKeyValues());
+ if (tableObject == null) {
+ tableObject = doMaker.createAndAddDataObject(rawDataFromRow, resultMetadata);
+
+ debug("Putting table " + tableName + " with PK " + rawDataFromRow.getPrimaryKeyValues() + " into registry");
+
+ registry.put(tableName, rawDataFromRow.getPrimaryKeyValues(),
+ tableObject);
+ }
+ tableObjects.put(tableName, tableObject);
+ }
+
+ tableObjects.processRelationships();
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java
new file mode 100644
index 0000000000..f68f48fc06
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java
@@ -0,0 +1,169 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+
+/**
+ *
+ * A ResultSetRow is used to transform a single row of a ResultSet into a set of
+ * EDataObjects.
+ */
+public class ResultSetRow {
+
+ private final ResultMetadata metadata;
+
+ private HashMap tableMap = new HashMap();
+
+ private ArrayList allTableData;
+
+ private boolean debug = false;
+
+ /**
+ * Method ResultSetRow.
+ *
+ * @param rs
+ * A ResultSet positioned on the desired row
+ * @param ePackage
+ * The package used to create EDataObjects
+ */
+ public ResultSetRow(ResultSet rs, ResultMetadata m) throws SQLException {
+ this.metadata = m;
+ if (m.isRecursive())
+ processRecursiveRow(rs);
+ else
+ processRow(rs);
+ }
+
+ /**
+ * Processes a single row in the ResultSet Method processRow.
+ *
+ * @param rs
+ */
+ private void processRow(ResultSet rs) throws SQLException {
+
+ DebugUtil.debugln(getClass(), debug, "");
+ for (int i = 1; i <= metadata.getResultSetSize(); i++) {
+ Object data = getObject(rs, i);
+
+ TableData table = getRawData(metadata.getTablePropertyName(i));
+ DebugUtil.debugln(getClass(), debug, "Adding column: "
+ + metadata.getColumnPropertyName(i) + "\tValue: " + data
+ + "\tTable: " + metadata.getTablePropertyName(i));
+ table.addData(metadata.getColumnPropertyName(i), metadata
+ .isPKColumn(i), data);
+ }
+
+ }
+
+ public void processRecursiveRow(ResultSet rs) throws SQLException {
+ this.allTableData = new ArrayList();
+ int i = 1;
+ DebugUtil.debugln(getClass(), debug, "");
+ while (i <= metadata.getResultSetSize()) {
+ DebugUtil.debugln(getClass(), debug, "");
+ TableData table = new TableData(metadata.getTablePropertyName(i));
+ this.allTableData.add(table);
+
+ while ( (i <= metadata.getResultSetSize()) && (metadata.isPKColumn(i))) {
+ Object data = getObject(rs, i);
+ DebugUtil.debugln(getClass(), debug, "Adding column: "
+ + metadata.getColumnPropertyName(i) + "\tValue: " + data
+ + "\tTable: " + metadata.getTablePropertyName(i));
+ table.addData(metadata.getColumnPropertyName(i), true, data);
+ i++;
+ }
+
+ while ( (i <= metadata.getResultSetSize()) &&
+ (!metadata.isPKColumn(i))) {
+ Object data = getObject(rs, i);
+ DebugUtil.debugln(getClass(), debug, "Adding column: "
+ + metadata.getColumnPropertyName(i) + "\tValue: " + data
+ + "\tTable: " + metadata.getTablePropertyName(i));
+ table.addData(metadata.getColumnPropertyName(i), false, data);
+ i++;
+ }
+ }
+ }
+
+ /**
+ * @param rs
+ * @param metadata
+ * @param i
+ * @return
+ */
+ private Object getObject(ResultSet rs, int i)
+ throws SQLException {
+
+ Object data = rs.getObject(i);
+
+ if (rs.wasNull())
+ return null;
+ else
+ return metadata.getConverter(i).getPropertyValue(data);
+ }
+
+ /**
+ * Returns a HashMap that holds data for the specified table
+ *
+ * @param tableName
+ * The name of the table
+ * @return HashMap
+ */
+ public TableData getTable(String tableName) {
+ return (TableData) tableMap.get(tableName);
+ }
+
+ /**
+ * Returns a HashMap that holds data for the specified table If the HashMap
+ * doesn't exist, it will be created. This is used internally to build the
+ * ResultSetRow, whereas getTable is used externally to retrieve existing
+ * table data.
+ *
+ * @param tableName
+ * The name of the table
+ * @return HashMap
+ */
+ private TableData getRawData(String tableName) {
+
+ TableData table = (TableData) tableMap.get(tableName);
+
+ if (table == null) {
+ table = new TableData(tableName);
+ tableMap.put(tableName, table);
+ }
+
+ return table;
+ }
+
+ public ArrayList getAllTableData() {
+ if ( this.allTableData == null ) {
+ this.allTableData = new ArrayList();
+ this.allTableData.addAll(tableMap.values());
+ }
+ DebugUtil.debugln(getClass(), debug, allTableData);
+
+ return this.allTableData;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java
new file mode 100644
index 0000000000..f0df0ab7c3
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java
@@ -0,0 +1,140 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.config.KeyPair;
+import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+
+
+public class RowObjects {
+
+ private HashMap objectsByTableName;
+
+ private ArrayList tableObjects;
+
+ private static final boolean debug = false;
+
+ private final GraphBuilderMetadata metadata;
+
+ private final TableRegistry registry;
+
+ public RowObjects(GraphBuilderMetadata metadata, TableRegistry registry) {
+ objectsByTableName = new HashMap();
+ tableObjects = new ArrayList();
+ this.metadata = metadata;
+ this.registry = registry;
+ }
+
+ public void put(String key, DataObject value) {
+ objectsByTableName.put(key, value);
+ tableObjects.add(value);
+ }
+
+ public DataObject get(String tablePropertyName) {
+ return (DataObject) objectsByTableName.get(tablePropertyName);
+ }
+
+ void processRelationships() {
+ MappingWrapper wrapper = new MappingWrapper(metadata.getMapping());
+ if (wrapper.hasRecursiveRelationships()) {
+ processRecursiveRelationships(wrapper);
+ return;
+ }
+
+ Iterator i = metadata.getRelationships().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+
+
+ DataObject parentTable = get(wrapper
+ .getTablePropertyName(r.getPrimaryKeyTable()));
+ DataObject childTable = get(wrapper
+ .getTablePropertyName(r.getForeignKeyTable()));
+
+ DebugUtil.debugln(getClass(), debug, "Parent table: " + parentTable);
+ DebugUtil.debugln(getClass(), debug, "Child table: " + childTable);
+
+ if ((parentTable == null) || (childTable == null))
+ continue;
+
+ Property p = parentTable.getType().getProperty(r.getName());
+ setOrAdd(parentTable, childTable, p);
+
+ }
+ }
+
+
+
+ private void processRecursiveRelationships(MappingWrapper wrapper) {
+ Iterator i = tableObjects.iterator();
+ while (i.hasNext()) {
+ DataObject table = (DataObject) i.next();
+
+ Iterator relationships = wrapper.getRelationshipsByChildTable(table.getType().getName()).iterator();
+ while ( relationships.hasNext() ) {
+ Relationship r = (Relationship) relationships.next();
+
+ DataObject parentTable = findParentTable(table, r, wrapper);
+
+ if (parentTable == null)
+ continue;
+
+ Property p = parentTable.getType().getProperty(r.getName());
+ setOrAdd(parentTable, table, p);
+ }
+
+ }
+ }
+
+ private void setOrAdd(DataObject parent, DataObject child, Property p) {
+ if (p.isMany()) {
+ parent.getList(p).add(child);
+ } else {
+ parent.set(p, child);
+ }
+ }
+
+ private DataObject findParentTable(DataObject childTable,
+ Relationship r, MappingWrapper wrapper) {
+
+ ArrayList fkValue = new ArrayList();
+ Iterator keyPairs = r.getKeyPair().iterator();
+ while (keyPairs.hasNext()) {
+ KeyPair pair = (KeyPair) keyPairs.next();
+ String childProperty = wrapper.getColumnPropertyName(r.getPrimaryKeyTable(), pair.getForeignKeyColumn());
+
+ Property p = childTable.getType().getProperty(childProperty);
+ fkValue.add(childTable.get(p));
+ }
+
+ DebugUtil.debugln(getClass(), debug, "Trying to find parent of " + r.getForeignKeyTable() + " with FK "
+ + fkValue);
+ DataObject parentTable = registry.get(r.getPrimaryKeyTable(), fkValue);
+ DebugUtil.debugln(getClass(), debug, "Parent table from registry: " + parentTable);
+ return parentTable;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java
new file mode 100644
index 0000000000..f00ef2770d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java
@@ -0,0 +1,52 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.util.List;
+
+import commonj.sdo.DataObject;
+
+/**
+ */
+public class SingleTableRegistry implements TableRegistry {
+
+ //private HashMap<List,DataObject> values = new HashMap<List,DataObject>();
+
+ public SingleTableRegistry() {
+ // Empty Constructor
+ }
+
+ /* (non-Javadoc)
+ * @see com.ibm.ws.sdo.mediator.jdbc.graphbuilder.impl.TableRegistry#get(java.lang.String, java.util.List)
+ */
+ public DataObject get(String tableName, List primaryKey) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see com.ibm.ws.sdo.mediator.jdbc.graphbuilder.impl.TableRegistry#put(java.lang.String, java.util.List, java.lang.Object)
+ */
+ public void put(String tableName, List primaryKey, DataObject value) {
+ // do nothing
+
+ }
+
+ public boolean contains(String name, List list) {
+ return false;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java
new file mode 100644
index 0000000000..48b6dc0187
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java
@@ -0,0 +1,75 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+
+/**
+ *
+ */
+public class TableData {
+
+ private HashMap columnData = new HashMap();
+ private ArrayList primaryKey = new ArrayList();
+ private final String name;
+ private boolean hasValidPrimaryKey = true;
+ private static final boolean debug = false;
+
+ public TableData(String tableName) {
+ DebugUtil.debugln(getClass(), debug, "Creating TableData for table " + tableName);
+ this.name = tableName;
+ }
+
+
+ public void addData(String columnName, boolean isPrimaryKeyColumn, Object data) {
+ DebugUtil.debugln(getClass(), debug, "Adding column " + columnName + " with value " + data);
+ columnData.put(columnName, data);
+ if ( isPrimaryKeyColumn ) {
+ if ( data == null ) {
+ DebugUtil.debugln(getClass(), debug, "Column " + columnName + " is a primary key column and is null");
+ hasValidPrimaryKey = false;
+ }
+ primaryKey.add(data);
+ }
+ }
+
+ public Object getColumnData(String columnName) {
+ return columnData.get(columnName);
+ }
+
+ public String getTableName() {
+ return this.name;
+ }
+
+
+ /**
+ * @return
+ */
+ public List getPrimaryKeyValues() {
+ return primaryKey;
+ }
+
+
+ public boolean hasValidPrimaryKey() {
+ return hasValidPrimaryKey;
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java
new file mode 100644
index 0000000000..4b5a3677ae
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java
@@ -0,0 +1,43 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.impl;
+
+import java.util.List;
+
+import commonj.sdo.DataObject;
+
+/**
+ */
+public interface TableRegistry {
+ /**
+ * Get the table with the specified name and primary key
+ * @param tableName
+ * @param primaryKey
+ * @return EDataObject
+ */
+ public DataObject get(String tableName, List primaryKey);
+
+ /**
+ * Add the table with the specified name and primary key
+ * @param tableName
+ * @param primaryKey
+ * @param value
+ */
+ public void put(String tableName, List primaryKey, DataObject value);
+
+ public boolean contains(String name, List list);
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
new file mode 100644
index 0000000000..3082384160
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
@@ -0,0 +1,171 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.schema;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.graphbuilder.impl.GraphBuilderMetadata;
+import org.apache.tuscany.das.rdb.graphbuilder.impl.ResultMetadata;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+import org.apache.tuscany.sdo.util.DataObjectUtil;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+import commonj.sdo.helper.TypeHelper;
+
+/**
+ *
+ * An ESchemaMaker is used to create an EMF Schema from an instance of JDBC
+ * Mediator Metadata.
+ *
+ */
+public class ESchemaMaker {
+
+ private final GraphBuilderMetadata metadata;
+
+ private boolean debug = false;
+
+ /**
+ * Constructor for ESchemaMaker. Creates an SDO model based on the metadata
+ * passed in.
+ *
+ * @param metadata
+ */
+ public ESchemaMaker(GraphBuilderMetadata metadata) {
+ this.metadata = metadata;
+ }
+
+ /**
+ * Creates an EMF Schema by using the
+ *
+ * @link TableMaker and
+ * @link RelationshipMaker to transform
+ * @link Metadata elements into EMF Schema elements.
+ */
+
+ public Type createTypes() {
+ TypeHelper types = SDOUtil.createTypeHelper();
+
+ DataObjectUtil.initRuntime();
+ SDOUtil.createDataGraph();
+
+
+ Type rootType = SDOUtil.createType(types, getURI(), "DataGraphRoot", false);
+
+ Iterator iter = metadata.getResultMetadata().iterator();
+ while (iter.hasNext()) {
+
+ ResultMetadata resultMetadata = (ResultMetadata) iter.next();
+
+ Iterator names = resultMetadata.getAllTablePropertyNames()
+ .iterator();
+ while (names.hasNext()) {
+ String tableName = (String) names.next();
+
+ Type tableType = SDOUtil.createType(types, getURI(), tableName, false);
+ Property property = SDOUtil.createProperty(rootType, tableName, tableType);
+ SDOUtil.setMany(property,true);
+ SDOUtil.setContainment(property, true);
+ }
+
+ // TODO tablePropertyMap is temporary until Tuscany-203 is fixed
+ HashMap tablePropertyMap = new HashMap();
+
+ for (int i = 1; i <= resultMetadata.getColumnNames().size(); i++) {
+
+ Property ref = rootType.getProperty(resultMetadata.getTablePropertyName(i));
+
+ // TODO Temporary code to check to see if a property has already been added.
+ // Replace when Tuscany-203 is fixed
+ ArrayList addedProperties = (ArrayList) tablePropertyMap.get(ref.getName());
+ if ( addedProperties == null ) {
+ addedProperties = new ArrayList();
+ tablePropertyMap.put(ref.getName(), addedProperties);
+ }
+
+ if (ref == null)
+ throw new RuntimeException("Could not find table "
+ + resultMetadata.getTablePropertyName(i)
+ + " in the SDO model");
+
+ String columnName = resultMetadata.getColumnPropertyName(i);
+
+ // TODO temporary check until Tuscany-203 is fixed
+ if ( !addedProperties.contains(columnName)) {
+ addedProperties.add(columnName);
+ Type atype = (Type) resultMetadata.getDataType(i);
+
+ SDOUtil.createProperty(ref.getType(), columnName, atype);
+
+ DebugUtil.debugln(getClass(), debug, "Adding column "
+ + columnName + " to "
+ + resultMetadata.getTablePropertyName(i));
+ }
+
+ }
+ }
+
+ if (metadata.hasMappingModel()) {
+ MappingWrapper wrapper = new MappingWrapper(metadata.getMapping());
+ Iterator i = metadata.getRelationships().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+
+ Type parent = rootType.getProperty(
+ wrapper.getTablePropertyName(r.getPrimaryKeyTable())).getType();
+ Type child = rootType.getProperty(
+ wrapper.getTablePropertyName(r.getForeignKeyTable())).getType();
+ if (parent == null) {
+ throw new RuntimeException("The parent table ("
+ + r.getPrimaryKeyTable() + ") in relationship "
+ + r.getName()
+ + " was not found in the mapping information.");
+ } else if (child == null) {
+ throw new RuntimeException("The child table ("
+ + r.getForeignKeyTable() + ") in relationship "
+ + r.getName()
+ + " was not found in the mapping information.");
+ }
+
+ // ReferenceImpl ref = refMaker.createReference(r, parent, child);
+
+ Property parentProp = SDOUtil.createProperty(parent, r.getName(), child);
+ Property childProp = SDOUtil.createProperty(child, r.getName() + "_opposite", parent);
+ SDOUtil.setOpposite(parentProp, childProp);
+ SDOUtil.setOpposite(childProp, parentProp);
+ SDOUtil.setMany(parentProp, r.isMany());
+
+
+
+ }
+
+ }
+
+ return rootType;
+ }
+
+ private String getURI() {
+ return "http:///org.apache.tuscany.das.rdb/das";
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java
new file mode 100644
index 0000000000..832cfeac7e
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java
@@ -0,0 +1,133 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.graphbuilder.schema;
+
+import java.sql.Types;
+
+import org.apache.tuscany.sdo.SDOPackage;
+
+import commonj.sdo.Type;
+import commonj.sdo.helper.TypeHelper;
+
+/**
+ */
+public class ResultSetTypeMap {
+
+ public static ResultSetTypeMap instance = new ResultSetTypeMap();
+
+ /**
+ * Constructor for ResultSetTypeMap.
+ */
+ protected ResultSetTypeMap() {
+ // Empty Constructor
+ }
+
+ /**
+ * These mappings taken primarily from "JDBC API and Tutorial and Reference" by
+ * Fisher, Ellis and Bruce.
+ *
+ * @param type
+ * @param isNullable
+ * @return
+ */
+ public Type getEDataType(int type, boolean isNullable) {
+
+ TypeHelper helper = TypeHelper.INSTANCE;
+ SDOPackage.eINSTANCE.eClass();
+ switch (type) {
+
+ case Types.CHAR:
+ case Types.VARCHAR:
+ case Types.LONGVARCHAR:
+ return helper.getType("commonj.sdo", "String");
+
+ case Types.NUMERIC:
+ case Types.DECIMAL:
+ return helper.getType("commonj.sdo", "Decimal");
+
+ case Types.BIT:
+ case Types.BOOLEAN:
+ if (isNullable)
+ return helper.getType("commonj.sdo", "Boolean");
+ else
+ return helper.getType("commonj.sdo", "boolean");
+
+ case Types.TINYINT:
+ case Types.SMALLINT:
+ case Types.INTEGER:
+ if (isNullable) {
+ return helper.getType("commonj.sdo", "IntObject");
+ } else
+ return helper.getType("commonj.sdo", "Int");
+
+ case Types.BIGINT:
+ if (isNullable)
+ return helper.getType("commonj.sdo", "Long");
+ else
+ return helper.getType("commonj.sdo", "long");
+
+ case Types.REAL:
+ if (isNullable)
+ return helper.getType("commonj.sdo", "Float");
+ else
+ return helper.getType("commonj.sdo", "float");
+
+ case Types.FLOAT:
+ case Types.DOUBLE:
+ if (isNullable)
+ return helper.getType("commonj.sdo", "Double");
+ else
+ return helper.getType("commonj.sdo", "double");
+
+ case Types.BINARY:
+ case Types.VARBINARY:
+ case Types.LONGVARBINARY:
+ return helper.getType("commonj.sdo", "ByteArray");
+
+ case Types.DATE:
+ case Types.TIME:
+ case Types.TIMESTAMP:
+ return helper.getType("commonj.sdo", "Date");
+
+ case Types.CLOB:
+ return helper.getType("commonj.sdo", "Clob");
+
+ case Types.BLOB:
+ return helper.getType("commonj.sdo", "Blob");
+
+ case Types.ARRAY:
+ return helper.getType("commonj.sdo", "Array");
+
+ case Types.DISTINCT:
+ case Types.STRUCT:
+ case Types.REF:
+ case Types.DATALINK:
+ case Types.JAVA_OBJECT:
+ return helper.getType("commonj.sdo", "Object");
+
+ default:
+ return helper.getType("commonj.sdo", "Object");
+ }
+
+ }
+
+
+ public Type getType(int columnType, boolean b) {
+ return getEDataType(columnType, b);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java
new file mode 100644
index 0000000000..79baf3c299
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java
@@ -0,0 +1,111 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConnectionProperties;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+/**
+ *
+ */
+public class ApplyChangesCommandImpl extends BaseCommandImpl implements ApplyChangesCommand {
+
+ private static final boolean debug = false;
+
+ private ChangeSummarizer summarizer = new ChangeSummarizer();
+
+ public ApplyChangesCommandImpl() {
+ }
+
+ public ApplyChangesCommandImpl(Config config){
+ this.configWrapper = new MappingWrapper(config);
+ if (config.getConnectionProperties() != null)
+ setConnection(config.getConnectionProperties());
+ }
+
+ public ApplyChangesCommandImpl(Config config, Connection connection){
+ this.configWrapper = new MappingWrapper(config);
+ setConnection(connection);
+ }
+
+ public void setConnection(ConnectionImpl connection) {
+ summarizer.setConnection(connection);
+ }
+
+ public void setConnection(ConnectionProperties c) {
+ try {
+ Connection connection = null;
+ Class.forName(c.getDriverClassName());
+ if (c.getDriverUserName() == null)
+ connection = DriverManager.getConnection(c.getDriverURL());
+ else
+ connection = DriverManager.getConnection(c.getDriverURL(), c.getDriverUserName(), c.getDriverPassword());
+ connection.setAutoCommit(false);
+ setConnection(connection);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ public void addCreateCommand(Type type, Command cmd) {
+ summarizer.addCreateCommand(type, cmd);
+ }
+
+ public void addUpdateCommand(Type type, Command cmd) {
+ summarizer.addUpdateCommand(type, cmd);
+ }
+
+ public void addDeleteCommand(Type type, Command cmd) {
+ summarizer.addDeleteCommand(type, cmd);
+ }
+
+ public void execute(DataObject root) {
+ DebugUtil.debugln(getClass(), debug, "Executing ApplyChangesCmd");
+
+ if (summarizer.getConnection() == null)
+ throw new RuntimeException("A connection must be provided");
+
+ if (!root.equals(root.getDataGraph().getRootObject()))
+ throw new RuntimeException("'root' argument must be the root of the datagraph");
+
+ summarizer.setMapping(configWrapper);
+
+ Changes changes = summarizer.loadChanges(root);
+
+ boolean success = false;
+ try {
+ changes.execute();
+ success = true;
+ } finally {
+ if (success)
+ summarizer.getConnection().cleanUp();
+ else
+ summarizer.getConnection().errorCleanUp();
+ }
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java
new file mode 100644
index 0000000000..e827426383
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java
@@ -0,0 +1,68 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.Key;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+
+public abstract class BaseCommandImpl {
+
+ protected MappingWrapper configWrapper = new MappingWrapper();
+
+ public void setConnection(Connection connection) {
+ setConnection(new ConnectionImpl(connection));
+ }
+
+ public void setConnection(Connection connection, boolean manageTransaction) {
+ ConnectionImpl c = new ConnectionImpl(connection);
+ c.setManageTransactions(manageTransaction);
+ setConnection(c);
+ }
+
+ public abstract void setConnection(ConnectionImpl c);
+
+ public void addRelationship(String parentName, String childName) {
+ configWrapper.addRelationship(parentName, childName);
+ }
+
+ public void addRelationship(Key parentKey, Key childKey) {
+ configWrapper.addRelationship(parentKey, childKey);
+ }
+
+ public void addPrimaryKey(String pk) {
+ configWrapper.addPrimaryKey(pk);
+ }
+
+ public void addPrimaryKey(Key pk) {
+ configWrapper.addPrimaryKey(pk);
+ }
+
+ public void addConverter(String name, String converter) {
+ configWrapper.addConverter(name, converter);
+ }
+
+ public void addCollisionColumn(String columnName) {
+ configWrapper.addCollisionColumn(columnName);
+ }
+
+ public void addGeneratedPrimaryKey(String columnName) {
+ configWrapper.addGeneratedPrimaryKey(columnName);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
new file mode 100644
index 0000000000..c56c55c636
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
@@ -0,0 +1,199 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.impl;
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
+import org.apache.tuscany.das.rdb.generator.impl.CudGenerator;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+
+public class ChangeFactory {
+
+ private final Type type;
+
+ private InsertCommandImpl createCommand;
+
+ private UpdateCommandImpl updateCommand;
+
+ private DeleteCommandImpl deleteCommand;
+
+ private static final boolean debug = false;
+
+ private CudGenerator cudGenerator;
+
+ private final MappingWrapper mapping;
+
+ private final ConnectionImpl connection;
+
+ public ChangeFactory(Type type, MappingWrapper mapping, ConnectionImpl connection) {
+ this.type = type;
+ this.mapping = mapping;
+ this.connection = connection;
+ }
+
+ public Type getType() {
+ return this.type;
+ }
+
+ public void setCreateCommand(InsertCommandImpl cmd) {
+ createCommand = cmd;
+ }
+
+ public void setUpdateCommand(UpdateCommandImpl cmd) {
+ DebugUtil.debugln(getClass(), debug, "Setting Update Command to " + cmd);
+ updateCommand = cmd;
+ }
+
+ public void setDeleteCommand(DeleteCommandImpl cmd) {
+ deleteCommand = cmd;
+ }
+
+ private CudGenerator getCudGenerator() {
+ if (this.cudGenerator == null)
+ this.cudGenerator = new CudGenerator();
+ return this.cudGenerator;
+ }
+
+ ChangeOperation createUpdateOperation(DataObject changedObject, String propagatedID) {
+ return new UpdateOperation(getUpdateCommand(changedObject), changedObject, propagatedID);
+ }
+ ChangeOperation createUpdateOperation(DataObject changedObject) {
+ return createUpdateOperation(changedObject, null);
+ }
+
+ ChangeOperation createDeleteOperation(DataObject changedObject) {
+ return new DeleteOperation(getDeleteCommand(changedObject), changedObject);
+ }
+
+ ChangeOperation createInsertOperation(DataObject changedObject, String propagatedID) {
+ return new CreateOperation(getCreateCommand(changedObject), changedObject, propagatedID);
+ }
+
+ ChangeOperation createInsertOperation(DataObject changedObject) {
+ return createInsertOperation(changedObject, null);
+ }
+
+
+ private InsertCommandImpl getCreateCommand(DataObject changedObject) {
+
+ if ( createCommand == null ) {
+ Table table = mapping.getTableByPropertyName(changedObject.getType().getName());
+ if (table == null ) {
+ if (changedObject.getType().getProperty("ID") != null ) {
+ // If the table is not defined in the config, assume it has a primary key of "ID"
+ mapping.addPrimaryKey(changedObject.getType().getName() + ".ID");
+ table = mapping.getTableByPropertyName(changedObject.getType().getName());
+ } else {
+ throw new RuntimeException("Table " + changedObject.getType().getName() + " was changed in the DataGraph but is not present in the Config");
+ }
+ }
+
+
+ String createStatement = table.getCreate();
+ if ( createStatement == null ) {
+ createCommand = getCudGenerator().getInsertCommand(mapping, changedObject, table);
+ } else {
+ createCommand = new InsertCommandImpl(createStatement);
+ Iterator i = getCudGenerator().getCreateParameters(mapping, changedObject, table).iterator();
+ while (i.hasNext()) {
+ Property p = (Property)i.next();
+ createCommand.addParameter(p.getName(), p.getType());
+ }
+ }
+ createCommand.setConnection(connection);
+ createCommand.configWrapper = mapping;
+ }
+ return createCommand;
+ }
+
+ private DeleteCommandImpl getDeleteCommand(DataObject changedObject) {
+
+ if ( deleteCommand == null ) {
+ Table table = mapping.getTableByPropertyName(changedObject.getType().getName());
+ if (table == null ) {
+ if (changedObject.getType().getProperty("ID") != null ) {
+ // If the table is not defined in the config, assume it has a primary key of "ID"
+ mapping.addPrimaryKey(changedObject.getType().getName() + ".ID");
+ table = mapping.getTableByPropertyName(changedObject.getType().getName());
+ } else {
+ throw new RuntimeException("Table " + changedObject.getType().getName() + " was changed in the DataGraph but is not present in the Config");
+ }
+ }
+
+ String deleteStatement = table.getDelete();
+ if ( deleteStatement == null ) {
+ deleteCommand = getCudGenerator().getDeleteCommand(table);
+ } else {
+ deleteCommand = new DeleteCommandImpl(deleteStatement);
+ Iterator i = getCudGenerator().getDeleteParameters(table).iterator();
+ while (i.hasNext()) {
+ deleteCommand.addParameter((String)i.next(), SDODataTypes.OBJECT);
+ }
+ }
+ deleteCommand.setConnection(connection);
+ }
+ return deleteCommand;
+ }
+
+ private UpdateCommandImpl getUpdateCommand(DataObject changedObject) {
+
+ if ( updateCommand == null ) {
+ Table table = mapping.getTableByPropertyName(changedObject.getType().getName());
+ if (table == null ) {
+ if (changedObject.getType().getProperty("ID") != null ) {
+ // If the table is not defined in the config, assume it has a primary key of "ID"
+ mapping.addPrimaryKey(changedObject.getType().getName() + ".ID");
+ table = mapping.getTableByPropertyName(changedObject.getType().getName());
+ } else {
+ throw new RuntimeException("Table " + changedObject.getType().getName() + " was changed in the DataGraph but is not present in the Config");
+ }
+ }
+ String updateStatement = table.getUpdate();
+ if ( updateStatement == null ) {
+ updateCommand = getCudGenerator().getUpdateCommand(mapping, changedObject,table);
+ } else {
+ TableWrapper t = new TableWrapper(table);
+ if ( t.getCollisionColumn() != null )
+ updateCommand = new OptimisticWriteCommandImpl(updateStatement);
+ else
+ updateCommand = new UpdateCommandImpl(updateStatement);
+
+
+ updateCommand.addParameters(getCudGenerator().getUpdateParameters(changedObject, table));
+
+ }
+ updateCommand.setConnection(connection);
+ updateCommand.configWrapper = mapping;
+ }
+ DebugUtil.debugln(getClass(), debug, "Returning updateCommand: " + updateCommand);
+ return updateCommand;
+ }
+
+ public MappingWrapper getConfig() {
+ return this.mapping;
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java
new file mode 100644
index 0000000000..c5221dda5c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java
@@ -0,0 +1,79 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+
+/**
+ */
+public abstract class ChangeOperation {
+
+ private final WriteCommandImpl writeCommand;
+
+ protected DatabaseObject dObject;
+
+ private static final boolean debug = false;
+
+ protected String propagatedID = null;
+
+ private boolean isInsert = false;
+
+ public ChangeOperation(DeleteCommandImpl command) {
+ writeCommand = command;
+ }
+
+ public ChangeOperation(InsertCommandImpl command, DataObject changedObject) {
+ writeCommand = command;
+ dObject = new DatabaseObject(command.getMappingModel(), changedObject);
+ this.isInsert = true;
+ }
+
+ public ChangeOperation(UpdateCommandImpl command, DataObject changedObject) {
+ writeCommand = command;
+ dObject = new DatabaseObject(command.getMappingModel(), changedObject);
+ }
+
+ public void execute() {
+ DebugUtil.debugln(getClass(), debug, "Executing change operation");
+
+ Iterator i = writeCommand.getParameters().iterator();
+ while (i.hasNext()) {
+ Parameter parm = (Parameter) i.next();
+ DebugUtil.debugln(getClass(), debug, "setting " + parm.getName() + " to " + dObject.get(parm.getName()));
+ parm.setValue(dObject.get(parm.getName()));
+ }
+
+ writeCommand.execute();
+
+ if ( isInsert && ( propagatedID != null )) {
+ DebugUtil.debugln(getClass(), debug, "Propagating key " + propagatedID);
+ int id = writeCommand.getGeneratedKey();
+ dObject.setPropagatedID(propagatedID, id);
+ }
+ }
+
+ public String getTableName() {
+ return dObject.getTableName();
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
new file mode 100644
index 0000000000..10984d9d4b
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java
@@ -0,0 +1,266 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.impl;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.Key;
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.QualifiedColumn;
+import org.apache.tuscany.das.rdb.config.wrapper.RelationshipWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+import org.apache.tuscany.sdo.impl.ChangeSummaryImpl;
+
+import commonj.sdo.ChangeSummary;
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+
+public class ChangeSummarizer {
+
+ private static final boolean debug = false;
+
+ private Changes changes = new Changes();
+
+ private FactoryRegistry registry;
+
+ private MappingWrapper mapping = new MappingWrapper();
+
+ private ConnectionImpl connection;
+
+ private HashMap generatedKeys = new HashMap();
+
+ public ChangeSummarizer() {
+ // Empty Constructor
+ }
+
+ public Changes loadChanges(DataObject root) {
+ ChangeSummary changeSummary = root.getDataGraph().getChangeSummary();
+ if (changeSummary.isLogging())
+ ((ChangeSummaryImpl) changeSummary).summarize();
+
+ List changedObjects = changeSummary.getChangedDataObjects();
+ DebugUtil.debugln(getClass(), debug,
+ "List of changed objects contains " + changedObjects.size()
+ + " object(s)");
+
+ changes.setInsertOrder(mapping.getInsertOrder());
+ changes.setDeleteOrder(mapping.getDeleteOrder());
+
+ Iterator i = changedObjects.iterator();
+ while (i.hasNext()) {
+ DataObject o = (DataObject) i.next();
+
+ if (!(o.equals(root))) {
+ createChange(changeSummary, o);
+ }
+ }
+
+ return changes;
+ }
+
+ public void createChange(ChangeSummary changeSummary,
+ DataObject changedObject) {
+
+ if (changeSummary.isCreated(changedObject)) {
+ DebugUtil.debugln(getClass(), debug, "Change is a create");
+ if (!changeSummary.isDeleted(changedObject)) {
+ ChangeFactory factory = getRegistry().getFactory(
+ changedObject.getType());
+ String propagatedID = (String) generatedKeys.get(changedObject
+ .getType().getName());
+ changes.addInsert(factory.createInsertOperation(changedObject,
+ propagatedID));
+ }
+ } else if (changeSummary.isDeleted(changedObject)) {
+ ChangeFactory factory = getRegistry().getFactory(
+ changedObject.getType());
+ DebugUtil.debugln(getClass(), debug, "Change is a delete");
+ changes.addDelete(factory.createDeleteOperation(changedObject));
+ } else {
+ // bumpCollisionField(changedObject);
+ DebugUtil.debugln(getClass(), debug, "Change is a modify");
+ List attrList = changeSummary.getOldValues(changedObject);
+ if (hasAttributeChange(attrList)) {
+ ChangeFactory factory = getRegistry().getFactory(
+ changedObject.getType());
+ DebugUtil.debugln(getClass(), debug, "Attribute Change for "
+ + changedObject.getType().getName());
+ String propagatedID = (String) generatedKeys.get(changedObject
+ .getType().getName());
+ changes.addUpdate(factory.createUpdateOperation(changedObject,
+ propagatedID));
+ } else {
+ // Reference change
+ List values = changeSummary.getOldValues(changedObject);
+ Iterator i = values.iterator();
+ while (i.hasNext()) {
+ ChangeSummary.Setting setting = (ChangeSummary.Setting) i
+ .next();
+
+ if (!setting.getProperty().getType().isDataType()) {
+ DebugUtil.debugln(getClass(), debug,
+ "Reference change for "
+ + changedObject.getType().getName());
+
+ Property ref = setting.getProperty();
+
+ DebugUtil.debugln(getClass(), debug, ref.getName());
+ if (hasState(ref, changedObject) ) {
+ ChangeFactory factory = getRegistry().getFactory(
+ changedObject.getType());
+ changes.addUpdate(factory
+ .createUpdateOperation(changedObject));
+ }
+
+ }
+ }
+ }
+ }
+
+ }
+
+ private boolean hasState(Property ref, DataObject changedObject) {
+ if ( ref.getOpposite().isMany() ) {
+ return true;
+ } else {
+ MappingWrapper mw = this.mapping;
+ if ( mw.getConfig() == null )
+ mw = registry.getFactory(changedObject.getType()).getConfig();
+ if ( mw.getConfig() == null )
+ return false;
+
+ Relationship rel = mw.getRelationshipByReference(ref);
+
+ if ( !rel.isMany()) {
+ // This is a one-one relationship
+ Table t = mapping.getTableByPropertyName(changedObject.getType().getName());
+ TableWrapper tw = new TableWrapper(t);
+ RelationshipWrapper rw = new RelationshipWrapper(rel);
+ if (( rel.getForeignKeyTable().equals(t.getName())) &&
+ ( Collections.disjoint(tw.getPrimaryKeyProperties(),rw.getForeignKeys()) ))
+ return true;
+
+ }
+
+ }
+ return false;
+ }
+
+ private boolean hasAttributeChange(List theChanges) {
+ Iterator i = theChanges.iterator();
+ while (i.hasNext()) {
+ ChangeSummary.Setting setting = (ChangeSummary.Setting) i.next();
+ if (setting.getProperty().getType().isDataType())
+ return true;
+ }
+ return false;
+ }
+
+ public void addCreateCommand(Type type, Command cmd) {
+ ChangeFactory cf = getRegistry().getFactory(type);
+ cf.setCreateCommand((InsertCommandImpl) cmd);
+ ((CommandImpl) cmd).setConnection(connection);
+ }
+
+ public void addUpdateCommand(Type type, Command cmd) {
+ ChangeFactory cf = getRegistry().getFactory(type);
+ cf.setUpdateCommand((UpdateCommandImpl) cmd);
+ ((CommandImpl) cmd).setConnection(connection);
+ }
+
+ public void addDeleteCommand(Type type, Command cmd) {
+ ChangeFactory cf = getRegistry().getFactory(type);
+ cf.setDeleteCommand((DeleteCommandImpl) cmd);
+ ((CommandImpl) cmd).setConnection(connection);
+
+ }
+
+ private FactoryRegistry getRegistry() {
+ if (this.registry == null) {
+ this.registry = new FactoryRegistry(mapping, connection);
+ }
+ return this.registry;
+ }
+
+ public void setConnection(ConnectionImpl connection) {
+ this.connection = connection;
+ }
+
+ public void setMapping(MappingWrapper map) {
+ this.mapping = map;
+
+ if ( mapping.getConfig() == null )
+ return;
+
+ Iterator i = mapping.getConfig().getTable().iterator();
+ while (i.hasNext()) {
+ Table t = (Table) i.next();
+ Iterator columns = t.getColumn().iterator();
+ while ( columns.hasNext()) {
+ Column c = (Column) columns.next();
+ if ( c.isPrimaryKey() && c.isGenerated()) {
+ DebugUtil.debugln(getClass(), debug, "adding generated key "
+ + t.getName() + "."
+ + c.getName());
+ generatedKeys.put(t.getName(), c.getName());
+ }
+ }
+ }
+ }
+
+ public void addRelationship(String parentName, String childName) {
+ mapping.addRelationship(parentName, childName);
+ }
+
+ public void addPrimaryKey(String columnName) {
+ mapping.addPrimaryKey(columnName);
+ }
+
+ public void addCollisionColumn(String columnName) {
+ mapping.addCollisionColumn(columnName);
+ }
+
+ public void addPrimarykey(Key key) {
+ mapping.addPrimaryKey(key);
+ }
+
+ public void addGeneratedPrimaryKey(String columnName) {
+ QualifiedColumn col = new QualifiedColumn(columnName);
+ generatedKeys.put(col.getTableName(), col.getColumnName());
+ mapping.addGeneratedPrimaryKey(columnName);
+ }
+
+ public void addConverter(String name, String converterName) {
+ mapping.addConverter(name, converterName);
+ }
+
+ public ConnectionImpl getConnection() {
+ return this.connection;
+ }
+
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java
new file mode 100644
index 0000000000..77198fe589
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java
@@ -0,0 +1,80 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * Mangages a set of graph-change operations. This simple implementaiton can be
+ * replaced with a version that provides R/I sorting
+ *
+ */
+public class Changes {
+
+ private InsertList inserts = new InsertList();
+ private UpdateList updates = new UpdateList();
+ private DeleteList deletes = new DeleteList();
+
+
+ public void addInsert(ChangeOperation c) {
+ inserts.add(c);
+ }
+
+ public void addUpdate(ChangeOperation c) {
+ updates.add(c);
+ }
+
+ public void addDelete(ChangeOperation c) {
+ deletes.add(c);
+ }
+
+ /**
+ * Execute all my change
+ */
+ public void execute() {
+
+ Iterator i = inserts.getSortedList().iterator();
+ while ( i.hasNext() ) {
+ ChangeOperation c = (ChangeOperation) i.next();
+ c.execute();
+ }
+
+ i = updates.getSortedList().iterator();
+ while ( i.hasNext() ) {
+ ChangeOperation c = (ChangeOperation) i.next();
+ c.execute();
+ }
+
+
+ i = deletes.getSortedList().iterator();
+ while (i.hasNext() ) {
+ ChangeOperation c = (ChangeOperation) i.next();
+ c.execute();
+ }
+
+ }
+
+ public void setInsertOrder(ArrayList insertOrder) {
+ inserts.setOrder(insertOrder);
+ }
+
+ public void setDeleteOrder(ArrayList deleteOrder) {
+ deletes.setOrder(deleteOrder);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java
new file mode 100644
index 0000000000..25c2223f13
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java
@@ -0,0 +1,77 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandFactory;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.util.ConfigUtil;
+
+public class CommandFactoryImpl implements CommandFactory {
+
+ public Command createCommand(String sql) {
+ return baseCreateCommand(sql, null);
+ }
+
+ public Command createCommand(String sql, InputStream configStream) {
+ return baseCreateCommand(sql, ConfigUtil.loadConfig(configStream));
+ }
+
+ public Command createCommand(String sql, Config config) {
+ return baseCreateCommand(sql, config);
+ }
+
+ public ApplyChangesCommand createApplyChangesCommand() {
+ return new ApplyChangesCommandImpl();
+ }
+
+ public ApplyChangesCommand createApplyChangesCommand(InputStream configStream) throws IOException {
+ return new ApplyChangesCommandImpl(ConfigUtil.loadConfig(configStream));
+ }
+
+ public ApplyChangesCommand createApplyChangesCommand(Config config) {
+ return new ApplyChangesCommandImpl(config);
+ }
+
+ // Utilities
+
+ private Command baseCreateCommand(String sql, Config config) {
+
+ sql = sql.trim(); // Remove leading white space
+ char firstChar = Character.toUpperCase(sql.charAt(0));
+ switch (firstChar) {
+ case 'S':
+ return new ReadCommandImpl(sql, config);
+ case 'I':
+ return new InsertCommandImpl(sql);
+ case 'U':
+ return new UpdateCommandImpl(sql);
+ case 'D':
+ return new DeleteCommandImpl(sql);
+ case '{':
+ return new SPCommandImpl(sql, config);
+ default:
+ throw new Error("SQL => " + sql + " is not valid");
+ }
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupFactoryImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupFactoryImpl.java
new file mode 100644
index 0000000000..196751857e
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupFactoryImpl.java
@@ -0,0 +1,31 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.io.InputStream;
+
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.CommandGroupFactory;
+
+public class CommandGroupFactoryImpl implements CommandGroupFactory {
+
+
+ public CommandGroup createCommandGroup(InputStream configStream) {
+ return new CommandGroupImpl(configStream);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupImpl.java
new file mode 100644
index 0000000000..aeaf3a7c57
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandGroupImpl.java
@@ -0,0 +1,207 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConnectionProperties;
+import org.apache.tuscany.das.rdb.util.ConfigUtil;
+
+/**
+ * An ConfiguredCommandFactory produces instances of Command and
+ * ApplyChangesCommand. This factory is initialized with a configuration that
+ * defines the commands it produces.
+ *
+ */
+public class CommandGroupImpl implements CommandGroup {
+
+ private Config config;
+
+ private Connection connection;
+
+ private Map commands = new HashMap();
+
+ public CommandGroupImpl(InputStream stream) {
+ super();
+ config = ConfigUtil.loadConfig(stream);
+ initialize();
+ }
+
+ private void initialize() {
+
+ Iterator i = config.getCommand().iterator();
+ while (i.hasNext()) {
+ org.apache.tuscany.das.rdb.config.Command commandConfig = (org.apache.tuscany.das.rdb.config.Command) i
+ .next();
+ String kind = commandConfig.getKind();
+ if (kind.equalsIgnoreCase("select"))
+ //TODO - Need to refactor Command heirarchy based on Datasource
+ if (config.getConnectionProperties() != null)
+ commands.put(commandConfig.getName(), new ReadCommandImpl(commandConfig.getSQL(), config, getConnection()));
+ else
+ commands.put(commandConfig.getName(), new ReadCommandImpl(commandConfig.getSQL(), config));
+ else if (kind.equalsIgnoreCase("update"))
+ commands.put(commandConfig.getName(), new UpdateCommandImpl(commandConfig.getSQL()));
+ else if (kind.equalsIgnoreCase("insert"))
+ commands.put(commandConfig.getName(), new InsertCommandImpl(commandConfig.getSQL()));
+ else if (kind.equalsIgnoreCase("delete"))
+ commands.put(commandConfig.getName(), new DeleteCommandImpl(commandConfig.getSQL()));
+ else
+ throw new Error("Invalid kind of command: " + kind);
+
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.das.rdb.CommandGroup#getApplyChangesCommand()
+ */
+ public ApplyChangesCommand getApplyChangesCommand() {
+ ApplyChangesCommand cmd = new ApplyChangesCommandImpl(config, connection);
+ return cmd;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.das.rdb.CommandGroup#getCommand(java.lang.String)
+ */
+ public Command getCommand(String name) {
+ if (!commands.containsKey(name))
+ throw new RuntimeException("CommandGroup has no command named: " + name);
+ Command cmd = (Command) commands.get(name);
+ cmd.setConnection(getConnection());
+ return cmd;
+ }
+
+
+ public void setConnection(Connection connection) {
+ this.connection = connection;
+ }
+
+ public Connection getConnection() {
+ if (connection == null)
+ initializeConnection();
+ return connection;
+ }
+
+ private void initializeConnection() {
+
+ ConnectionProperties cp = config.getConnectionProperties();
+ if (cp == null)
+ throw new Error(
+ "No connection properties have been configured and no connection has been provided");
+
+ if (cp.getDataSource() != null)
+ initViaDataSource(cp);
+ else
+ initViaDriverManager(cp);
+
+ }
+
+ private void initViaDriverManager(ConnectionProperties cp) {
+ Connection connection = null;
+
+ try {
+ Class.forName(cp.getDriverClassName());
+ if (cp.getDriverUserName() == null)
+ connection = DriverManager.getConnection(cp.getDriverURL());
+ else
+ connection = DriverManager.getConnection(cp.getDriverURL(), cp.getDriverUserName(), cp
+ .getDriverPassword());
+ connection.setAutoCommit(false);
+ setConnection(connection);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+
+ }
+
+ // TODO - Refactor to eliminate common initialization code after connection
+ // is got
+ private void initViaDataSource(ConnectionProperties cp) {
+
+ Connection connection = null;
+
+ InitialContext ctx;
+ try {
+ ctx = new InitialContext();
+ } catch (NamingException e) {
+ throw new Error(e);
+ }
+ try {
+ // TODO - I think we should rename this getDataSourceURL?
+ DataSource ds = (DataSource) ctx.lookup(cp.getDataSource());
+ try {
+ connection = ds.getConnection();
+ connection.setAutoCommit(false);
+ setConnection(connection);
+ } catch (SQLException e) {
+ throw new Error(e);
+ }
+ } catch (NamingException e) {
+ throw new Error(e);
+ }
+
+ }
+
+ public void releaseResources() {
+
+ if (managingConnections())
+ closeConnection();
+ }
+
+ private void closeConnection() {
+ if (connection != null)
+ try {
+ connection.close();
+ connection = null;
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * If the config has connection properties then we are "manageing" the
+ * connection via DriverManager or DataSource
+ */
+ private boolean managingConnections() {
+
+ if (config.getConnectionProperties() == null)
+ return false;
+ else
+ return true;
+
+ }
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java
new file mode 100644
index 0000000000..2ac9e324da
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java
@@ -0,0 +1,145 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.ResultSetShape;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+import commonj.sdo.helper.XSDHelper;
+
+public abstract class CommandImpl extends BaseCommandImpl implements Command {
+
+ protected Statement statement;
+
+ protected Parameters parameters = new Parameters();
+
+ protected static final boolean debug = false;
+
+ protected ResultSetShape resultSetShape;
+
+ public CommandImpl(String sqlString) {
+ statement = new Statement(sqlString);
+
+ try {
+ URL url = getClass().getResource("/xml/sdoJava.xsd");
+ if (url == null)
+ throw new RuntimeException(
+ "Could not find resource: xml/sdoJava.xsd");
+
+ InputStream inputStream = url.openStream();
+ XSDHelper.INSTANCE.define(inputStream, url.toString());
+ inputStream.close();
+ } catch ( IOException ex ) {
+ throw new RuntimeException(ex);
+ }
+
+ }
+
+ public abstract void execute();
+
+ public abstract DataObject executeQuery();
+
+ public void setParameterValue(String name, Object value) {
+ parameters.setParameter(name, value);
+ }
+
+ public void setParameterValue(int index, Object value) {
+ parameters.setParameter(index, value);
+ }
+
+ public void setParameterType(String name, Type dataType) {
+ parameters.setParameterWithType(name, dataType);
+ }
+
+ public void setParameterType(int index, Type dataType) {
+ parameters.setParameterWithType(index, dataType);
+ }
+
+ public void addParameter(int index, Type sdoType) {
+ addParameter(index, Parameter.IN, sdoType);
+ }
+
+ public void addParameter(int index, int direction, Type sdoType) {
+ parameters.findOrCreateParameterWithIndex(index, direction, sdoType);
+ }
+
+ public void addParameter(String name, Type sdoType) {
+ addParameter(name, Parameter.IN, sdoType);
+ }
+
+ public void addParameter(String name, int direction, Type sdoType) {
+ parameters.setParameterWithType(name, sdoType);
+ }
+
+ public void addParameter(Parameter param) {
+ parameters.add(param);
+ }
+
+ public Parameter getParameter(String name) {
+ return parameters.get(name);
+ }
+
+ public Parameter getParameter(int index) {
+ return parameters.get(index);
+
+ }
+
+ public List getParameters() {
+ return parameters.parameterList();
+ }
+
+ public Object getParameterValue(String name) {
+ Parameter p = parameters.get(name);
+ if (p == null)
+ throw new RuntimeException("Parameter with name " + name
+ + " not found");
+
+ return p;
+ }
+
+ public Object getParameterValue(int index) {
+ return parameters.parameterWithIndex(index).getValue();
+ }
+
+ public void setConnection(ConnectionImpl connection) {
+ statement.setConnection(connection);
+ }
+
+ protected ConnectionImpl getConnection() {
+ return statement.getConnection();
+ }
+
+
+
+ public void setResultSetShape(ResultSetShape shape) {
+ this.resultSetShape = shape;
+ }
+
+
+ public void close() {
+ statement.close();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java
new file mode 100644
index 0000000000..2da21bf930
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java
@@ -0,0 +1,95 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+
+public class ConnectionImpl {
+
+ private Connection connection;
+ private static final boolean debug = false;
+
+ private boolean managingTransaction = true;
+
+ public ConnectionImpl(Connection connection) {
+ this.connection = connection;
+
+ try {
+ if (connection.getAutoCommit())
+ throw new RuntimeException("AutoCommit must be off!");
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ public Connection getJDBCConnection() {
+ return connection;
+ }
+
+ public void cleanUp() {
+ try {
+ if (managingTransaction) {
+ DebugUtil.debugln(getClass(), debug, "Committing Transaction");
+ connection.commit();
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void errorCleanUp() {
+ try {
+ if (managingTransaction) {
+ DebugUtil.debugln(getClass(), debug, "Rolling back Transaction");
+ connection.rollback();
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public PreparedStatement prepareStatement(QueryString queryString)
+ throws SQLException {
+ DebugUtil.debugln(getClass(), debug, "Preparing Statement: " + queryString.getPreparedString());
+ return connection.prepareStatement(queryString.getPreparedString(), java.sql.Statement.RETURN_GENERATED_KEYS);
+ }
+
+ public PreparedStatement preparePagedStatement(QueryString queryString) throws SQLException {
+ DebugUtil.debugln(getClass(), debug, "Preparing Statement: " + queryString.getPreparedString());
+ return connection.prepareStatement(queryString.getPreparedString(), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
+ }
+
+ public void setManageTransactions(boolean manageTransactions) {
+ managingTransaction = manageTransactions;
+
+ }
+
+ public CallableStatement prepareCall(QueryString queryString) throws SQLException {
+ return connection.prepareCall(queryString.getPreparedString());
+ }
+
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java
new file mode 100644
index 0000000000..5c70dc1e6f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java
@@ -0,0 +1,29 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+
+import commonj.sdo.DataObject;
+
+public class CreateOperation extends ChangeOperation {
+
+ public CreateOperation(InsertCommandImpl command, DataObject changedObject, String ID) {
+ super(command, changedObject);
+ this.propagatedID = ID;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
new file mode 100644
index 0000000000..eaf56a6c2c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
@@ -0,0 +1,148 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.KeyPair;
+import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+
+/**
+ * DatabaseObject wraps DataObject. If a field is an FK field, it will return
+ * the value from the parent.
+ *
+ *
+ */
+public class DatabaseObject {
+
+ private final MappingWrapper mappingWrapper;
+
+ private final DataObject dataObject;
+
+ private Property parentReference;
+
+ private static final boolean debug = false;
+
+ private HashMap keyMappings = new HashMap();
+
+ public DatabaseObject(Config model, DataObject changedObject) {
+ this.mappingWrapper = new MappingWrapper(model);
+ this.dataObject = changedObject;
+ initialize();
+ }
+
+ // Initialize Key Mappings
+ private void initialize() {
+ if (mappingWrapper.getConfig() != null) {
+ List relationships = mappingWrapper.getConfig().getRelationship();
+ Iterator i = relationships.iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+ DebugUtil.debugln(getClass(), debug, "Initializing relationship: " + r.getName());
+ if (r.getForeignKeyTable().equals(getTypeName())) {
+ List pairs = r.getKeyPair();
+ Iterator iter = pairs.iterator();
+ while (iter.hasNext()) {
+ KeyPair pair = (KeyPair) iter.next();
+ keyMappings.put(pair.getForeignKeyColumn(), r);
+ }
+ }
+ }
+ }
+ }
+
+ public Object get(String parameter) {
+
+ if (isPartOfPrimaryKey(parameter))
+ return dataObject.get(parameter);
+
+ Relationship r = (Relationship) keyMappings.get(parameter);
+ if (r == null)
+ return dataObject.get(parameter);
+
+ Property parentRef = getParentReference(r.getPrimaryKeyTable());
+ DataObject parent = dataObject.getDataObject(parentRef);
+ if (parent == null)
+ return null;
+ String parentKey = getParentKey(r, parameter);
+ return parent.get(parentKey);
+
+ }
+
+ private String getParentKey(Relationship r, String parameter) {
+ List keyPairs = r.getKeyPair();
+ Iterator i = keyPairs.iterator();
+ while (i.hasNext()) {
+ KeyPair pair = (KeyPair) i.next();
+ if (pair.getForeignKeyColumn().equals(parameter))
+ return pair.getPrimaryKeyColumn();
+ }
+ return null;
+ }
+
+ public Property getParentReference(String parentName) {
+ if (this.parentReference == null) {
+
+ Iterator i = dataObject.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property ref = (Property) i.next();
+ if ((!ref.getType().isDataType()) && (ref.getType().getName().equals(parentName))) {
+ this.parentReference = ref;
+ }
+ }
+ }
+ return this.parentReference;
+ }
+
+ public String getTableName() {
+ if (mappingWrapper.getConfig() != null)
+ return mappingWrapper.getTableByPropertyName(getTypeName()).getName();
+ else
+ return null;
+ }
+
+ public String getTypeName() {
+ return dataObject.getType().getName();
+ }
+
+ public void setPropagatedID(String propagatedID, int id) {
+ dataObject.setInt(propagatedID, id);
+ }
+
+ private boolean isPartOfPrimaryKey(String parameter) {
+ if (mappingWrapper.getConfig() == null)
+ return false;
+ Table t = mappingWrapper.getTable(getTableName());
+ if (t == null)
+ return false;
+ Column c = mappingWrapper.getColumnByPropertyName(t, parameter);
+ if (c == null)
+ return false;
+ return c.isPrimaryKey();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java
new file mode 100644
index 0000000000..3502784b6f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java
@@ -0,0 +1,25 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+public class DeleteCommandImpl extends WriteCommandImpl {
+
+ public DeleteCommandImpl(String sqlString) {
+ super(sqlString);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java
new file mode 100644
index 0000000000..8650c6119c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java
@@ -0,0 +1,72 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * DeleteList will sort delete operations so that child objects are deleted
+ * before their parents
+ *
+ *
+ */
+public class DeleteList {
+
+ private HashMap opsByTableName = new HashMap();
+
+ private ArrayList order;
+
+ private ArrayList deleteOperations = new ArrayList();
+
+ public DeleteList() {
+ super();
+ }
+
+ public void add(ChangeOperation op) {
+ if (( order == null ) || ( op.getTableName() == null ) ) {
+ deleteOperations.add(op);
+ } else {
+ String name = op.getTableName();
+ ArrayList ops = (ArrayList) opsByTableName.get(name);
+ if (ops == null)
+ ops = new ArrayList();
+
+ ops.add(op);
+ opsByTableName.put(name, ops);
+ }
+ }
+
+ public Collection getSortedList() {
+ if (( order != null ) && ( opsByTableName.keySet().size() > 0) ) {
+ Iterator i = this.order.iterator();
+ while (i.hasNext()) {
+ String name = (String) i.next();
+ deleteOperations.addAll((Collection) opsByTableName.get(name));
+ }
+ }
+
+ return deleteOperations;
+ }
+
+ public void setOrder(ArrayList deleteOrder) {
+ this.order = deleteOrder;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java
new file mode 100644
index 0000000000..7b71e0ace9
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java
@@ -0,0 +1,38 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import org.apache.tuscany.das.rdb.util.DataObjectUtil;
+
+import commonj.sdo.DataObject;
+
+public class DeleteOperation extends ChangeOperation {
+
+
+ /**
+ * @param command
+ * @param changedObject
+ * Objects deleted from the graph have lost their "settings" and must
+ * be restored
+ */
+ public DeleteOperation(DeleteCommandImpl command, DataObject changedObject) {
+ super(command);
+ this.dObject = new DatabaseObject(command.getMappingModel(),DataObjectUtil.getRestoredCopy(changedObject));
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java
new file mode 100644
index 0000000000..ce09c748f4
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java
@@ -0,0 +1,49 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.HashMap;
+
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.Type;
+
+public class FactoryRegistry {
+
+ private HashMap registry = new HashMap();
+ private static final boolean debug = false;
+ private final MappingWrapper mapping;
+ private final ConnectionImpl connection;
+
+ public FactoryRegistry(MappingWrapper mapping, ConnectionImpl connection) {
+ this.mapping = mapping;
+ this.connection = connection;
+ }
+
+ public ChangeFactory getFactory(Type type) {
+ ChangeFactory factory = (ChangeFactory)registry.get(type);
+ if ( factory == null ) {
+ DebugUtil.debugln(getClass(), debug, "Creating new ChangeFactory for type " + type.getName());
+ factory = new ChangeFactory(type, mapping, connection);
+ registry.put(type, factory);
+ }
+ return factory;
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java
new file mode 100644
index 0000000000..9c890c7106
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java
@@ -0,0 +1,79 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.SQLException;
+
+public class InsertCommandImpl extends WriteCommandImpl {
+
+ private int generatedKey;
+
+ private boolean hasGeneratedKey = false;
+
+ public InsertCommandImpl(String sqlString) {
+ super(sqlString);
+ }
+
+ protected boolean isInsert() {
+ return true;
+ }
+
+ public int getGeneratedKey() {
+
+ if (hasGeneratedKey)
+ return generatedKey;
+
+ throw new RuntimeException("No generated key is available");
+ }
+
+ public Object getParameterValue(String name) {
+
+ if (name.equals("generated_key"))
+ if (hasGeneratedKey)
+ return new Integer(generatedKey);
+ else
+ throw new RuntimeException("No generated key available");
+
+ return super.getParameterValue(name);
+ }
+
+ protected void subtypeProcessing() throws SQLException {
+ loadGeneratedKey();
+ }
+
+ private void loadGeneratedKey() throws SQLException {
+ Integer key = statement.getGeneratedKey();
+ if (key != null) {
+ hasGeneratedKey = true;
+ generatedKey = key.intValue();
+ }
+
+ }
+
+ public String toString() {
+
+ String superString = super.toString();
+ StringBuffer buffer = new StringBuffer(superString);
+
+ buffer.append("\nGenerating key: " + hasGeneratedKey);
+ if (hasGeneratedKey)
+ buffer.append("\nGenerated key: " + generatedKey);
+
+ return buffer.toString();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java
new file mode 100644
index 0000000000..dee6546cfe
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java
@@ -0,0 +1,82 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+/**
+ * InsertList will sort ChangeOperation objects so that parents are inserted
+ * before children
+ *
+ *
+ */
+public class InsertList {
+
+ private HashMap opsByTableName = new HashMap();
+
+ private ArrayList insertOperations = new ArrayList();
+
+ private ArrayList order;
+
+ private static final boolean debug = false;
+
+ public void add(ChangeOperation op) {
+ DebugUtil.debugln(getClass(), debug, "Adding insert operation ");
+ // If nothing has been added yet, or this is no ordering, simply
+ // add the operation to the list
+ if ((order.size() == 0) || (op.getTableName() == null)) {
+ insertOperations.add(op);
+ } else {
+ String name = op.getTableName();
+ ArrayList ops = (ArrayList) opsByTableName.get(name);
+ if (ops == null)
+ ops = new ArrayList();
+
+ ops.add(op);
+ opsByTableName.put(name, ops);
+ }
+ }
+
+ public Collection getSortedList() {
+ DebugUtil.debugln(getClass(), debug, "Getting sorted insert list");
+ if ((order.size() > 0) && opsByTableName.keySet().size() > 0) {
+ Iterator i = this.order.iterator();
+ while (i.hasNext()) {
+ String name = (String) i.next();
+ DebugUtil.debugln(getClass(), debug,
+ "Adding operations for table " + name);
+ // A null here means a table is in the config but hasn't been changed here
+ if (opsByTableName.get(name) != null)
+ insertOperations.addAll((Collection) opsByTableName
+ .get(name));
+ }
+ }
+ DebugUtil.debugln(getClass(), debug, "Returning "
+ + insertOperations.size() + " insert operations");
+ return insertOperations;
+ }
+
+ public void setOrder(ArrayList insertOrder) {
+ this.order = insertOrder;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java
new file mode 100644
index 0000000000..22ff822bb0
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java
@@ -0,0 +1,45 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.SQLException;
+
+public class OptimisticWriteCommandImpl extends UpdateCommandImpl {
+
+ public OptimisticWriteCommandImpl(String sqlString) {
+ super(sqlString);
+ }
+
+ public void execute() {
+
+ boolean success = false;
+ try {
+ int rowsAffected = statement.executeUpdate(parameters);
+ success = true;
+ if ( rowsAffected == 0 )
+ throw new RuntimeException("OCC Exception");
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (success)
+ statement.getConnection().cleanUp();
+ else
+ statement.getConnection().errorCleanUp();
+ }
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java
new file mode 100644
index 0000000000..32b17ef3e7
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.Pager;
+
+import commonj.sdo.DataObject;
+
+public class PagerImpl implements Pager {
+
+ private final ReadCommandImpl command;
+ private final int size;
+ private int idx = 1;
+
+ public PagerImpl(Command command, int size) {
+ this.command = (ReadCommandImpl)command;
+ this.command.enablePaging();
+ this.size = size;
+ }
+
+ public DataObject next() {
+ int start = idx;
+ int end = idx + size;
+ idx += size;
+ command.setStartRow(start);
+ command.setEndRow(end);
+ return command.executeQuery();
+ }
+
+ public DataObject getPage(int page) {
+ int end = (page * size) + 1;
+ int start = end - size;
+ idx = end;
+ command.setStartRow(start);
+ command.setEndRow(end);
+ return command.executeQuery();
+ }
+
+ public DataObject previous() {
+ int start = idx - (2 * size);
+ if ( start < 1 )
+ start = 1;
+ int end = start + size;
+ idx = end;
+ command.setStartRow(start);
+ command.setEndRow(end);
+ return command.executeQuery();
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java
new file mode 100644
index 0000000000..4528661b2c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java
@@ -0,0 +1,107 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import org.apache.tuscany.das.rdb.Converter;
+import org.apache.tuscany.das.rdb.Parameter;
+
+import commonj.sdo.Type;
+
+public class ParameterImpl implements Parameter {
+
+ private int index;
+ private Type type;
+ private String name;
+ private Object value;
+ private int direction = IN;
+ private Converter converter;
+
+ public ParameterImpl() {
+ super();
+ }
+
+ public ParameterImpl(String name) {
+ this.name = name;
+ }
+
+ public ParameterImpl(int index) {
+ this.index = index;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+
+ public void setIndex(int index) {
+ if ( index == 0 )
+ throw new RuntimeException("Index of zero not allowed");
+ this.index = index;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+ public void setDirection(int direction) {
+ this.direction = direction;
+ }
+
+ public Type getType() {
+ return this.type;
+ }
+
+ public int getIndex() {
+ return this.index;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public Object getValue() {
+ if ( getConverter() != null ) {
+ return getConverter().getColumnValue(this.value);
+ } else {
+ return this.value;
+ }
+ }
+
+ public int getDirection() {
+ return this.direction;
+ }
+
+ public void setConverter(Converter converter) {
+ this.converter = converter;
+ }
+
+ public Converter getConverter() {
+ return this.converter;
+ }
+
+
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("Index: " + getIndex());
+ buffer.append("\nName: " + getName());
+ buffer.append("\nValue: " + getValue());
+ return buffer.toString();
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java
new file mode 100644
index 0000000000..4ea42f41b2
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java
@@ -0,0 +1,150 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.Type;
+
+public class Parameters {
+
+ private ArrayList parameters = new ArrayList();
+
+ private ArrayList inParams = new ArrayList();
+
+ private ArrayList outParams = new ArrayList();
+
+ private HashMap parametersByName = new HashMap();
+
+ private static boolean debug = false;
+
+ public Parameters() {
+ super();
+ }
+
+ public Parameter get(String name) {
+ return (Parameter) parametersByName.get(name);
+ }
+
+ public Parameter get(int index) {
+ return (Parameter) parameters.get(index);
+ }
+
+ public List outParams() {
+ return outParams;
+ }
+
+ public List inParams() {
+ return inParams;
+ }
+
+ private void addParameter(Parameter param) {
+ if (param.getDirection() == Parameter.IN)
+ inParams.add(param);
+ else if ((param.getDirection() == Parameter.OUT)
+ || (param.getDirection() == Parameter.IN_OUT))
+ outParams.add(param);
+
+ this.parameters.add(param);
+ parametersByName.put(param.getName(), param);
+ }
+
+ public void add(Parameter param) {
+ addParameter(param);
+ }
+
+ public Parameter findOrCreateParameterNamed(String name) {
+ Parameter param = get(name);
+ if (param == null) {
+ param = new ParameterImpl(name);
+ addParameter(param);
+ }
+ return param;
+ }
+
+ public Parameter findOrCreateParameterWithIndex(int index, int direction,
+ Type sdoType) {
+ Iterator i = parameters.iterator();
+ while (i.hasNext()) {
+ Parameter param = (Parameter) i.next();
+
+ if (param.getIndex() == index)
+ return param;
+ }
+ DebugUtil.debugln(getClass(), debug,
+ "Creating new parameter with index " + index);
+ Parameter newParam = new ParameterImpl(index);
+ newParam.setDirection(direction);
+ newParam.setType(sdoType);
+ addParameter(newParam);
+ return newParam;
+ }
+
+ public List parameterList() {
+ return parameters;
+ }
+
+ public Parameter findOrCreateParameterWithIndex(int index) {
+ return findOrCreateParameterWithIndex(index, Parameter.IN,
+ SDODataTypes.OBJECT);
+ }
+
+ public void setParameter(int index, Object value) {
+ Parameter param = findOrCreateParameterWithIndex(index);
+ param.setValue(value);
+ }
+
+ public void setParameter(String name, Object value) {
+ if (name == null)
+ throw new RuntimeException("Null parameter name not allowed");
+ Parameter param = findOrCreateParameterNamed(name);
+ param.setValue(value);
+ }
+
+ public void setParameterWithType(String name, Type sdoType) {
+ if (name == null)
+ throw new RuntimeException("Null parameter name not allowed");
+ Parameter p = findOrCreateParameterNamed(name);
+ p.setType(sdoType);
+ }
+
+ public void setParameterWithType(int index, Type sdoType) {
+ if (index == 0)
+ throw new RuntimeException("Null parameter index not allowed");
+ Parameter p = findOrCreateParameterWithIndex(index);
+ p.setType(sdoType);
+ }
+
+ public Parameter parameterWithIndex(int index) {
+ Iterator i = parameters.iterator();
+ while (i.hasNext()) {
+ Parameter param = (Parameter) i.next();
+
+ if (param.getIndex() == index)
+ return param;
+ }
+ return null;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java
new file mode 100644
index 0000000000..8304457a72
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/QueryString.java
@@ -0,0 +1,87 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+
+public class QueryString {
+
+ private final String unmodifiedQueryString;
+ private final String preparedString;
+ private HashMap parameters = new HashMap();
+ private static final boolean debug = false;
+
+ public QueryString(String originalString) {
+ this.unmodifiedQueryString = originalString;
+ this.preparedString = replaceNamesAndSetIndexes(originalString);
+ }
+
+ public String getPreparedString() {
+ return this.preparedString;
+ }
+
+ public String getUnmodifiedString() {
+ return this.unmodifiedQueryString;
+ }
+
+ public int getParameterIndex(String name) {
+ DebugUtil.debugln(getClass(), debug, "Looking for parameter index for: " + name);
+ //System.out.println(toString());
+ return ((Integer)parameters.get(name)).intValue();
+ }
+
+ private String replaceNamesAndSetIndexes(String query) {
+ DebugUtil.debugln(getClass(), debug, "Parameterizing query: " + query);
+ Pattern p = Pattern.compile(":[\\S&&[^,()]]*");
+ Matcher m = p.matcher(query);
+
+ int index = 1;
+ while (m.find()) {
+ parameters.put(m.group().substring(1), new Integer(index));
+ query = m.replaceFirst("?");
+ m = p.matcher(query);
+ index++;
+ }
+
+ DebugUtil.debugln(getClass(), debug, "Parameterized query: " + query);
+ return query;
+ }
+
+
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("\nOriginal SQL: ");
+ buffer.append(unmodifiedQueryString);
+ buffer.append("\nPrepared SQL: ");
+ buffer.append(preparedString);
+ buffer.append("\nParameters: ");
+ Iterator i = parameters.keySet().iterator();
+ while ( i.hasNext() ) {
+ String key = (String)i.next();
+ buffer.append("\n");
+ buffer.append(key);
+ }
+ return buffer.toString();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
new file mode 100644
index 0000000000..708fd88b38
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
@@ -0,0 +1,168 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConnectionProperties;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.graphbuilder.impl.GraphBuilderMetadata;
+import org.apache.tuscany.das.rdb.graphbuilder.impl.ResultSetProcessor;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.ChangeSummary;
+import commonj.sdo.DataGraph;
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+public class ReadCommandImpl extends CommandImpl {
+
+ private Type schema;
+
+ private int startRow = 1;
+
+ private int endRow = Integer.MAX_VALUE;
+
+ public ReadCommandImpl(String sqlString) {
+ super(sqlString);
+ }
+
+ public ReadCommandImpl(String sqlString, Config mapping) {
+ this(sqlString);
+ if (mapping != null)
+ setMappingModel(mapping);
+ }
+
+ //TODO - Need to refactor based on use of DataSource and CommandGroup
+ public ReadCommandImpl(String sqlString, Config mapping, Connection connection) {
+ this(sqlString);
+ setConnection(connection);
+ if (mapping != null)
+ setMappingModel(mapping);
+ }
+
+ public void execute() {
+ throw new UnsupportedOperationException();
+ }
+
+ public DataObject executeQuery() {
+
+ if (statement.getConnection() == null)
+ throw new RuntimeException("A DASConnection object must be specified before executing the query.");
+
+ boolean success = false;
+ try {
+ ResultSet rs = statement.executeQuery(parameters);
+ success = true;
+ return buildGraph(rs);
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (success)
+ statement.getConnection().cleanUp();
+ else
+ statement.getConnection().errorCleanUp();
+ }
+ }
+
+ protected DataObject buildGraph(ResultSet result) throws SQLException {
+
+ List results = new ArrayList();
+ results.add(result);
+
+ // Before we use the mappingModel, do some checking/updating. If
+ // inferrable information
+ // isn't specified, add it in.
+
+ GraphBuilderMetadata gbmd = new GraphBuilderMetadata(results, getSchema(), configWrapper.getConfig(),
+ resultSetShape);
+
+ // Create the DataGraph
+ DataGraph g = SDOUtil.createDataGraph();
+
+ // Create the root object
+ g.createRootObject(gbmd.getSchema());
+
+ ChangeSummary summary = g.getChangeSummary();
+
+ ResultSetProcessor rsp = new ResultSetProcessor(g.getRootObject(), gbmd);
+ rsp.processResults(getStartRow(), getEndRow());
+
+ summary.beginLogging();
+
+ return g.getRootObject();
+ }
+
+ private Type getSchema() {
+ return (Type) schema;
+ }
+
+ protected int getStartRow() {
+ return startRow;
+ }
+
+ protected int getEndRow() {
+ return endRow;
+ }
+
+ protected void setStartRow(int startRow) {
+ this.startRow = startRow;
+ }
+
+ protected void setEndRow(int endRow) {
+ this.endRow = endRow;
+ }
+
+ private void setMappingModel(Config config) {
+ configWrapper = new MappingWrapper(config);
+ //TODO - need to refactor and take into regression that lost ability to use Datasource
+ if (getConnection() == null)
+ if (config.getConnectionProperties() != null)
+ setConnection(config.getConnectionProperties());
+ }
+
+ public void setConnection(ConnectionProperties c) {
+ try {
+ Connection connection = null;
+ Class.forName(c.getDriverClassName());
+ if (c.getDriverUserName() == null)
+ connection = DriverManager.getConnection(c.getDriverURL());
+ else
+ connection = DriverManager.getConnection(c.getDriverURL(), c.getDriverUserName(), c
+ .getDriverPassword());
+ connection.setAutoCommit(false);
+ setConnection(connection);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ public void setDataObjectModel(Type schema) {
+ this.schema = schema;
+ }
+
+ protected void enablePaging() {
+ statement.enablePaging();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java
new file mode 100644
index 0000000000..7afa3b8563
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java
@@ -0,0 +1,100 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.SDODataTypes;
+
+import commonj.sdo.Type;
+
+public class SDODataTypeHelper {
+
+ static public int sqlTypeFor(Type sdoType) {
+ if ( sdoType == SDODataTypes.BOOLEAN)
+ return Types.BOOLEAN;
+ else if ( sdoType == SDODataTypes.STRING)
+ return Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.BYTE)
+ return Types.TINYINT;
+ else if ( sdoType == SDODataTypes.BYTES)
+ return Types.BINARY;
+ else if ( sdoType == SDODataTypes.CHARACTER)
+ return Types.CHAR;
+ else if ( sdoType == SDODataTypes.DATE)
+ return Types.DATE;
+ else if ( sdoType == SDODataTypes.DATETIME)
+ return Types.DATE;
+ else if ( sdoType == SDODataTypes.DAY )
+ return java.sql.Types.BINARY;
+ else if ( sdoType == SDODataTypes.DECIMAL )
+ return java.sql.Types.DECIMAL;
+ else if ( sdoType == SDODataTypes.DOUBLE )
+ return java.sql.Types.DOUBLE;
+ else if ( sdoType == SDODataTypes.DURATION )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.FLOAT )
+ return java.sql.Types.REAL;
+ else if ( sdoType == SDODataTypes.INT )
+ return java.sql.Types.INTEGER;
+ else if ( sdoType == SDODataTypes.INTEGER )
+ return java.sql.Types.INTEGER;
+ else if ( sdoType == SDODataTypes.LONG )
+ return java.sql.Types.BIGINT;
+ else if ( sdoType == SDODataTypes.MONTH )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.MONTHDAY )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.OBJECT )
+ return java.sql.Types.JAVA_OBJECT;
+ else if ( sdoType == SDODataTypes.SHORT )
+ return java.sql.Types.SMALLINT;
+ else if ( sdoType == SDODataTypes.STRING )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.STRINGS )
+ return java.sql.Types.OTHER;
+ else if ( sdoType == SDODataTypes.TIME )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.URI )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.YEAR )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.YEARMONTH )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.YEARMONTHDAY )
+ return java.sql.Types.VARCHAR;
+ else if ( sdoType == SDODataTypes.BOOLEANOBJECT )
+ return java.sql.Types.BOOLEAN;
+ else if ( sdoType == SDODataTypes.BYTEOBJECT )
+ return java.sql.Types.TINYINT;
+ else if ( sdoType == SDODataTypes.CHARACTEROBJECT )
+ return java.sql.Types.CHAR;
+ else if ( sdoType == SDODataTypes.DOUBLEOBJECT )
+ return java.sql.Types.DOUBLE;
+ else if ( sdoType == SDODataTypes.FLOATOBJECT )
+ return java.sql.Types.REAL;
+ else if ( sdoType == SDODataTypes.INTEGEROBJECT )
+ return java.sql.Types.INTEGER;
+ else if ( sdoType == SDODataTypes.LONGOBJECT )
+ return java.sql.Types.BIGINT;
+ else if ( sdoType == SDODataTypes.SHORTOBJECT )
+ return java.sql.Types.SMALLINT;
+ else
+ throw new RuntimeException("Not a valid SDO Type " + sdoType);
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
new file mode 100644
index 0000000000..0fb647815d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
@@ -0,0 +1,73 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+import commonj.sdo.DataObject;
+
+public class SPCommandImpl extends ReadCommandImpl {
+
+ public SPCommandImpl(String sqlString) {
+ super(sqlString);
+ }
+
+ public SPCommandImpl(String sqlString, Config config) {
+ super(sqlString, config);
+ }
+
+ public DataObject executeQuery() {
+
+ boolean success = false;
+ try {
+ ResultSet rs = statement.executeCall(parameters);
+ success = true;
+
+ return buildGraph(rs);
+ } catch (SQLException e) {
+ DebugUtil.debugln(getClass(), debug, e);
+ throw new RuntimeException(e);
+ } finally {
+ if (success)
+ statement.getConnection().cleanUp();
+ else
+ statement.getConnection().errorCleanUp();
+ }
+ }
+
+ public void execute() {
+
+ boolean success = false;
+ try {
+ statement.executeUpdateCall(parameters);
+ success = true;
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (success)
+ statement.getConnection().cleanUp();
+ else
+ statement.getConnection().errorCleanUp();
+ }
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java
new file mode 100644
index 0000000000..6bc18dc229
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java
@@ -0,0 +1,206 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+//TODO - Can use some refactoring. Much code is duplicated in "execute" methods
+public class Statement {
+
+ protected final QueryString queryString;
+
+ protected ConnectionImpl jdbcConnection;
+
+ private static final boolean debug = false;
+
+ private PreparedStatement preparedStatement;
+
+ private boolean isPaging = false;
+
+ public Statement(String sqlString) {
+ this.queryString = new QueryString(sqlString);
+ }
+
+ public ResultSet executeQuery(Parameters parameters) throws SQLException {
+
+ PreparedStatement ps = getPreparedStatement();
+ ps = setParameters(ps, parameters);
+ ResultSet rs = ps.executeQuery();
+
+ return rs;
+ }
+
+ public ResultSet executeCall(Parameters parameters) throws SQLException {
+ try {
+ CallableStatement cs = jdbcConnection.prepareCall(queryString);
+
+ Iterator inParams = parameters.inParams().iterator();
+ while (inParams.hasNext()) {
+ Parameter param = (Parameter) inParams.next();
+ if (param.getIndex() == 0)
+ param.setIndex(queryString.getParameterIndex(param.getName()));
+ cs.setObject(param.getIndex(), param.getValue());
+ }
+
+ // register out parameters
+ Iterator outParams = parameters.outParams().iterator();
+ while (outParams.hasNext()) {
+ Parameter param = (Parameter) outParams.next();
+ if (param.getIndex() == 0)
+ param.setIndex(queryString.getParameterIndex(param.getName()));
+ DebugUtil.debugln(getClass(), debug, "Registering parameter " + param.getName());
+ cs.registerOutParameter(param.getIndex(), SDODataTypeHelper.sqlTypeFor(param.getType()));
+ }
+
+ // Using execute because Derby does not currenlty support
+ // executeQuery
+ // for SP
+ cs.execute();
+ ResultSet results = cs.getResultSet();
+
+ Iterator i = parameters.outParams().iterator();
+ while (i.hasNext()) {
+ Parameter param = (Parameter) i.next();
+ param.setValue(cs.getObject(param.getIndex()));
+ }
+
+ return results;
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ throw ex;
+ }
+
+ }
+
+ public void executeUpdateCall(Parameters parameters) throws SQLException {
+ CallableStatement cs = jdbcConnection.prepareCall(queryString);
+
+ Iterator inParams = parameters.inParams().iterator();
+ while (inParams.hasNext()) {
+ Parameter param = (Parameter) inParams.next();
+ if (param.getIndex() == 0)
+ param.setIndex(queryString.getParameterIndex(param.getName()));
+ cs.setObject(param.getIndex(), param.getValue());
+ }
+
+ // register out parameters
+ Iterator outParams = parameters.outParams().iterator();
+ while (outParams.hasNext()) {
+ Parameter param = (Parameter) outParams.next();
+ if (param.getIndex() == 0)
+ param.setIndex(queryString.getParameterIndex(param.getName()));
+ DebugUtil.debugln(getClass(), debug, "Registering parameter " + param.getName());
+ cs.registerOutParameter(param.getIndex(), SDODataTypeHelper.sqlTypeFor(param.getType()));
+ }
+
+ cs.execute();
+
+ Iterator out = parameters.outParams().iterator();
+ while (out.hasNext()) {
+ Parameter param = (Parameter) out.next();
+ param.setValue(cs.getObject(param.getIndex()));
+ }
+
+ }
+
+ /**
+ * TODO - We need to look at using specific ps.setXXX methods when a type
+ * has been specified and try setObject otherwise.
+ */
+ public int executeUpdate(Parameters parameters) throws SQLException {
+ DebugUtil.debugln(getClass(), debug, "Executing statement " + queryString.getPreparedString());
+ PreparedStatement ps = getPreparedStatement();
+ Iterator i = parameters.inParams().iterator();
+ while (i.hasNext()) {
+ Parameter param = (Parameter) i.next();
+ if (param.getIndex() == 0)
+ param.setIndex(queryString.getParameterIndex(param.getName()));
+ Object value = param.getValue();
+ DebugUtil.debugln(getClass(), debug, "Setting parameter " + param.getIndex() + " to " + value);
+ if (value == null) {
+ ps.setNull(param.getIndex(), SDODataTypeHelper.sqlTypeFor(param.getType()));
+ } else {
+ ps.setObject(param.getIndex(), value);
+ }
+ }
+ return ps.executeUpdate();
+ }
+
+ protected PreparedStatement setParameters(PreparedStatement ps, Parameters parameters)
+ throws SQLException {
+ Iterator i = parameters.inParams().iterator();
+ while (i.hasNext()) {
+ Parameter param = (Parameter) i.next();
+ if (param.getIndex() == 0)
+ param.setIndex(queryString.getParameterIndex(param.getName()));
+ ps.setObject(param.getIndex(), param.getValue());
+ }
+ return ps;
+ }
+
+ public void setConnection(ConnectionImpl jdbcConnection) {
+ this.jdbcConnection = jdbcConnection;
+ }
+
+ public ConnectionImpl getConnection() {
+ return this.jdbcConnection;
+ }
+
+ private PreparedStatement getPreparedStatement() throws SQLException {
+ DebugUtil.debugln(getClass(), debug, "Getting prepared statement");
+ if (preparedStatement == null)
+ if (isPaging)
+ preparedStatement = jdbcConnection.preparePagedStatement(queryString);
+ else
+ preparedStatement = jdbcConnection.prepareStatement(queryString);
+
+ return preparedStatement;
+ }
+
+ public Integer getGeneratedKey() throws SQLException {
+
+ ResultSet rs = getPreparedStatement().getGeneratedKeys();
+ if (rs.next())
+ return new Integer(rs.getInt(1));
+
+ return null;
+ }
+
+ protected void enablePaging() {
+ isPaging = true;
+ }
+
+ public void close() {
+
+ if (this.preparedStatement != null) {
+ try {
+ preparedStatement.close();
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java
new file mode 100644
index 0000000000..7fffe97d5d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java
@@ -0,0 +1,25 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+public class UpdateCommandImpl extends WriteCommandImpl {
+
+ public UpdateCommandImpl(String sqlString) {
+ super(sqlString);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java
new file mode 100644
index 0000000000..1ab2f16fca
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java
@@ -0,0 +1,42 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Updates don't have to be sorted, so this class is a simple wrapper of ArrayList.
+ *
+ */
+public class UpdateList {
+
+ private ArrayList updates = new ArrayList();
+
+ public UpdateList() {
+ super();
+ }
+
+ public void add(ChangeOperation c) {
+ updates .add(c);
+ }
+
+ public Collection getSortedList() {
+ return updates;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java
new file mode 100644
index 0000000000..cbe73a16e4
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java
@@ -0,0 +1,30 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.impl;
+
+
+import commonj.sdo.DataObject;
+
+
+public class UpdateOperation extends ChangeOperation {
+
+ public UpdateOperation(UpdateCommandImpl command, DataObject changedObject, String id) {
+ super(command, changedObject);
+ this.propagatedID = id;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java
new file mode 100644
index 0000000000..ff1ac385d4
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java
@@ -0,0 +1,97 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.impl;
+
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.config.Config;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+public abstract class WriteCommandImpl extends CommandImpl {
+
+
+ public WriteCommandImpl(String sqlString) {
+ super(sqlString);
+ }
+
+ public void execute() {
+
+ boolean success = false;
+ try {
+ statement.executeUpdate(parameters);
+ subtypeProcessing();
+ success = true;
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (success)
+ statement.getConnection().cleanUp();
+ else
+ statement.getConnection().errorCleanUp();
+ }
+
+ }
+
+ public DataObject executeQuery() {
+ throw new UnsupportedOperationException();
+ }
+
+ public Config getMappingModel() {
+ return configWrapper.getConfig();
+ }
+
+
+ /**
+ * Subclasses add specific bahavior
+ * Default is to do nothing
+ */
+ protected void subtypeProcessing() throws SQLException {
+ if ( false )
+ throw new SQLException();
+ }
+
+ public void setDataObjectModel(Type schema) {
+ // don't really care what the model is here
+ }
+
+ public String toString() {
+
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("\nSQL: " + statement.queryString.getUnmodifiedString());
+ buffer.append("\nModified SQL: " + statement.queryString.getPreparedString());
+ return buffer.toString();
+ }
+
+ public int getGeneratedKey() {
+ throw new RuntimeException("No generated key is available");
+ }
+
+ public void addParameters(Collection updateParameters) {
+ Iterator i = updateParameters.iterator();
+ while ( i.hasNext()) {
+ Parameter p = (Parameter) i.next();
+ addParameter(p);
+ }
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
new file mode 100644
index 0000000000..15943da067
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
@@ -0,0 +1,166 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.merge.impl;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.apache.tuscany.das.rdb.config.wrapper.QualifiedColumn;
+import org.apache.tuscany.das.rdb.graphbuilder.impl.MultiTableRegistry;
+import org.apache.tuscany.das.rdb.graphbuilder.impl.TableRegistry;
+import org.apache.tuscany.sdo.impl.ChangeSummaryImpl;
+
+import commonj.sdo.ChangeSummary;
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+
+public class GraphMerger {
+
+ private HashMap keys = new HashMap();
+
+ private TableRegistry registry = new MultiTableRegistry();
+
+ private static Logger logger = Logger.getLogger("GraphMerger");
+
+ //TODO lots of cleanup/design
+ public GraphMerger() {
+ // Empty Constructor
+ }
+
+ public DataObject merge(List graphs) {
+ DataObject primaryGraph = (DataObject) graphs.get(0);
+
+ Iterator i = graphs.iterator();
+ if (i.hasNext())
+ i.next();
+ while (i.hasNext()) {
+ primaryGraph = merge(primaryGraph, (DataObject) i.next());
+ }
+
+ return primaryGraph;
+ }
+
+ public DataObject merge(DataObject primary, DataObject secondary) {
+ addGraphToRegistry(primary);
+
+ ChangeSummary summary = primary
+ .getDataGraph().getChangeSummary();
+ summary.endLogging();
+ Iterator i = secondary.getType().getProperties().iterator();
+
+ while (i.hasNext()) {
+ Property p = (Property) i.next();
+
+ Iterator objects = secondary.getList(p.getName()).iterator();
+ while (objects.hasNext()) {
+ DataObject object = (DataObject) objects.next();
+ createObjectWithSubtree(primary, p, object);
+ }
+ }
+ ((ChangeSummaryImpl)summary).resumeLogging();
+ return primary;
+ }
+
+ private void createObjectWithSubtree(DataObject root, Property p,
+ DataObject object) {
+ Object pk = getPrimaryKey(object);
+
+ if (!registry.contains(object.getType().getName(), Collections
+ .singletonList(pk))) {
+ // logger.info("creating " + object.getType().getName() + " with pk " + pk);
+ DataObject newObject = root.createDataObject(p.getName());
+
+
+
+ Iterator attrs = object.getType().getProperties().iterator();
+ while (attrs.hasNext()) {
+ Property attr = (Property) attrs.next();
+ if ( attr.getType().isDataType()) {
+ newObject.set(attr.getName(), object.get(attr));
+ }
+ }
+ registry.put(object.getType().getName(), Collections
+ .singletonList(pk), newObject);
+
+ Iterator refs = object.getType().getProperties().iterator();
+ while (refs.hasNext()) {
+ Property ref = (Property) refs.next();
+ if ( !ref.getType().isDataType()) {
+ List refObjects;
+ if (!ref.isMany()) {
+ refObjects = Collections.singletonList(object.get(ref));
+ } else {
+ refObjects = (List) object.get(ref);
+ }
+
+ Iterator iter = refObjects.iterator();
+ while (iter.hasNext()) {
+ DataObject refObject = (DataObject) iter.next();
+ createObjectWithSubtree(root, refObject
+ .getContainmentProperty(), refObject);
+
+ refObject = (DataObject) registry.get(refObject.getType().getName(), Collections.singletonList(getPrimaryKey(refObject)));
+ if (ref.isMany()) {
+ newObject.getList(
+ newObject.getType().getProperty(ref.getName()))
+ .add(refObject);
+ } else
+ newObject.set(newObject.getType().getProperty(
+ ref.getName()), refObject);
+ }
+ }
+
+ }
+
+ }
+
+ }
+
+ private void addGraphToRegistry(DataObject graph1) {
+ Iterator i = graph1.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property p = (Property) i.next();
+ Iterator objects = graph1.getList(p).iterator();
+ while (objects.hasNext()) {
+ DataObject object = (DataObject) objects.next();
+ Object pk = object.get(getPrimaryKeyName(object));
+ logger.finest("Adding object with pk " + pk + " to registry");
+ registry.put(object.getType().getName(), Collections
+ .singletonList(pk), object);
+ }
+ }
+ }
+
+ private Object getPrimaryKey(DataObject object) {
+ String pkName = getPrimaryKeyName(object);
+ return object.get(pkName);
+ }
+
+ private String getPrimaryKeyName(DataObject object) {
+ return (String) keys.get(object.getType().getName());
+ }
+
+ public void addPrimaryKey(String key) {
+ QualifiedColumn column = new QualifiedColumn(key);
+ logger.finest("Adding " + column.getTableName() + " "
+ + column.getColumnName() + " to keys");
+ keys.put(column.getTableName(), column.getColumnName());
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java
new file mode 100644
index 0000000000..c0d7f41e8b
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java
@@ -0,0 +1,51 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.helper.XMLHelper;
+
+/**
+ * Config util provides config-related utilities such as loading a Config
+ * instance from an InputStream
+ *
+ */
+public class ConfigUtil {
+
+ public static Config loadConfig(InputStream configStream) {
+
+ if (configStream == null)
+ throw new Error(
+ "Cannot load configuration from a null InputStream. Possibly caused by an incorrect config xml file name");
+
+ SDOUtil.registerStaticTypes(ConfigFactory.class);
+ XMLHelper helper = XMLHelper.INSTANCE;
+
+ try {
+ return (Config) helper.load(configStream).getRootObject();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java
new file mode 100644
index 0000000000..7f96f9aef4
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java
@@ -0,0 +1,73 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.util;
+
+import java.util.Iterator;
+import java.util.List;
+
+import commonj.sdo.ChangeSummary;
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.ChangeSummary.Setting;
+import commonj.sdo.helper.DataFactory;
+
+/**
+ */
+public class DataObjectUtil {
+
+ //Utilities
+ public static DataObject getRestoredCopy(DataObject changedDO) {
+ DataObject changedCopy = getCopy(changedDO);
+ restoreAttributeValues(changedCopy, changedDO);
+ return changedCopy;
+ }
+
+ public static DataObject getCopy(DataObject original) {
+
+ DataObject copy = DataFactory.INSTANCE.create(original.getType());
+
+ //Fill in values
+ Iterator i = original.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property feature = (Property) i.next();
+ copy.set(feature, original.get(feature));
+ }
+ return copy;
+ }
+
+ /**
+ * @param changedCopy
+ * @return
+ */
+ private static void restoreAttributeValues(DataObject changedCopy, DataObject changedDO) {
+
+ ChangeSummary changeSummary = changedDO.getDataGraph().getChangeSummary();
+ List changes = changeSummary.getOldValues(changedDO);
+ if ( changes == null )
+ return;
+
+ Iterator i = changes.iterator();
+ while (i.hasNext()) {
+ Setting s = (Setting) i.next();
+ if ( s.getProperty().getType().isDataType() )
+ changedCopy.set(s.getProperty(), s.getValue());
+ }
+ }
+
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugFormatter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugFormatter.java
new file mode 100644
index 0000000000..ed2e1063d6
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugFormatter.java
@@ -0,0 +1,34 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.util;
+
+import java.util.logging.Formatter;
+import java.util.logging.LogRecord;
+
+public class DebugFormatter extends Formatter {
+
+ public String format(LogRecord record) {
+ StringBuffer message = new StringBuffer();
+ message.append("[");
+ message.append(record.getSourceClassName());
+ message.append("] ");
+ message.append(record.getMessage());
+ message.append("\n");
+ return message.toString();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugUtil.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugUtil.java
new file mode 100644
index 0000000000..745fe8cb7e
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DebugUtil.java
@@ -0,0 +1,66 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.util;
+
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+//TODO Restructure Logging
+public class DebugUtil {
+
+ private static StringBuffer buffer = new StringBuffer();
+ private static final Logger logger = Logger.getAnonymousLogger();
+
+ static {
+ logger.setUseParentHandlers(false);
+ Handler h = new ConsoleHandler();
+ h.setFormatter(new DebugFormatter());
+ logger.addHandler(h);
+ }
+ public static void debugln(Class c, boolean flag, Object obj) {
+
+ if ( flag ) {
+ logger.logp(Level.INFO, getClassName(c), null, obj.toString() );
+ }
+ }
+
+ public static void debug(Class c, boolean flag, Object obj) {
+ if ( flag ) {
+ System.out.print("[" + getClassName(c) + "] " + obj );
+ }
+ }
+
+ public static void buffer(boolean flag, Object obj) {
+ if ( flag )
+ buffer.append(obj);
+ }
+
+ public static void flushBuffer(Class c, boolean flag) {
+ if ( flag ) {
+ System.out.println("[" + getClassName(c) + "] " + buffer.toString());
+ buffer = new StringBuffer();
+ }
+ }
+
+ private static String getClassName(Class c) {
+ String className = c.getName();
+ return className.substring(className.lastIndexOf(".") + 1);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/LICENSE.txt b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000000..25d78feeac
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,1277 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
+
+
+APACHE TUSCANY SUBCOMPONENTS:
+
+The Apache Tuscany distribution includes a number of subcomponents with
+separate copyright notices and license terms. Your use of the source
+code for the these subcomponents is subject to the terms and
+conditions of the following licenses.
+
+===============================================================================
+
+For the Eclipse Modeling Framework component and the Celtix binding:
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF
+THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and
+documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and
+are distributed by that particular Contributor. A Contribution
+'originates' from a Contributor if it was added to the Program by such
+Contributor itself or anyone acting on such Contributor's behalf.
+Contributions do not include additions to the Program which: (i) are
+separate modules of software distributed in conjunction with the
+Program under their own license agreement, and (ii) are not derivative
+works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor
+which are necessarily infringed by the use or sale of its Contribution
+alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this
+Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free copyright
+license to reproduce, prepare derivative works of, publicly display,
+publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and
+object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free patent
+license under Licensed Patents to make, use, sell, offer to sell,
+import and otherwise transfer the Contribution of such Contributor, if
+any, in source code and object code form. This patent license shall
+apply to the combination of the Contribution and the Program if, at
+the time the Contribution is added by the Contributor, such addition
+of the Contribution causes such combination to be covered by the
+Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the
+licenses to its Contributions set forth herein, no assurances are
+provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow
+Recipient to distribute the Program, it is Recipient's responsibility
+to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright
+license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form
+under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties
+and conditions, express and implied, including warranties or
+conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability
+for damages, including direct, indirect, special, incidental and
+consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are
+offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such
+Contributor, and informs licensees how to obtain it in a reasonable
+manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the
+Program.
+
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a
+commercial product offering should do so in a manner which does not
+create potential liability for other Contributors. Therefore, if a
+Contributor includes the Program in a commercial product offering,
+such Contributor ("Commercial Contributor") hereby agrees to defend
+and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising
+from claims, lawsuits and other legal actions brought by a third party
+against the Indemnified Contributor to the extent caused by the acts
+or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement.
+In order to qualify, an Indemnified Contributor must: a) promptly
+notify the Commercial Contributor in writing of such claim, and b)
+allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement
+negotiations. The Indemnified Contributor may participate in any such
+claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
+WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable
+laws, damage to or loss of data, programs or equipment, and
+unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
+ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+the Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of
+the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign
+the responsibility to serve as the Agreement Steward to a suitable
+separate entity. Each new version of the Agreement will be given a
+distinguishing version number. The Program (including Contributions)
+may always be distributed subject to the version of the Agreement
+under which it was received. In addition, after a new version of the
+Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives
+no rights or licenses to the intellectual property of any Contributor
+under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No
+party to this Agreement will bring a legal action under this Agreement
+more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.
+
+===============================================================================
+
+For the Rhino JavaScript container component:
+
+Mozilla Public License 1.1 (MPL 1.1)
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original Code,
+prior Modifications used by a Contributor, and the Modifications made by that
+particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+combination of the Original Code and Modifications, in each case including
+portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+accepted in the software development community for the electronic transfer of
+data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified as
+the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+extent possible, whether at the time of the initial grant or subsequently
+acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+substance or structure of either the Original Code or any previous
+Modifications. When Covered Code is released as a series of files, a
+Modification is:
+ A. Any addition to or deletion from the contents of a file
+containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+which is described in the Source Code notice required by Exhibit A as Original
+Code, and which, at the time of its release under this License is not already
+Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+hereafter acquired, including without limitation, method, process, and
+apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+making modifications to it, including all modules it contains, plus any
+associated interface definition files, scripts used to control compilation and
+installation of an Executable, or source code differential comparisons against
+either the Original Code or another well known, available Covered Code of the
+Contributor's choice. The Source Code can be in a compressed or archival form,
+provided the appropriate decompression or de-archiving software is widely
+available for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+exercising rights under, and complying with all of the terms of, this License
+or a future version of this License issued under Section 6.1. For legal
+entities, "You" includes any entity which controls, is controlled by, or is
+under common control with You. For purposes of this definition, "control"
+means (a) the power, direct or indirect, to cause the direction or management
+of such entity, whether by contract or otherwise, or (b) ownership of more
+than fifty percent (50%) of the outstanding shares or beneficial ownership of
+such entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+non-exclusive license, subject to third party intellectual property claims:
+ (a) under intellectual property rights (other than patent or
+trademark) Licensable by Initial Developer to use, reproduce, modify, display,
+perform, sublicense and distribute the Original Code (or portions thereof)
+with or without Modifications, and/or as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or selling
+of Original Code, to make, have made, use, practice, sell, and offer for sale,
+and/or otherwise dispose of the Original Code (or portions thereof).
+ (c) the licenses granted in this Section 2.1(a) and
+(b) are effective on the date Initial Developer first distributes Original
+Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+granted: 1) for code that You delete from the Original Code; 2) separate from
+the Original Code; or 3) for infringements caused by: i) the modification of
+the Original Code or ii) the combination of the Original Code with other
+software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+trademark) Licensable by Contributor, to use, reproduce, modify, display,
+perform, sublicense and distribute the Modifications created by such
+Contributor (or portions thereof) either on an unmodified basis, with other
+Modifications, as Covered Code and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or selling
+of Modifications made by that Contributor either alone and/or in combination
+with its Contributor Version (or portions of such combination), to make, use,
+sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications
+made by that Contributor (or portions thereof); and 2) the combination of
+Modifications made by that Contributor with its Contributor Version (or
+portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+effective on the date Contributor first makes Commercial Use of the Covered
+Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+granted: 1) for any code that Contributor has deleted from the Contributor
+Version; 2) separate from the Contributor Version; 3) for infringements
+caused by: i) third party modifications of Contributor Version or ii) the
+combination of Modifications made by that Contributor with other software
+(except as part of the Contributor Version) or other devices; or 4) under
+Patent Claims infringed by Covered Code in the absence of Modifications made
+by that Contributor.
+
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+governed by the terms of this License, including without limitation Section
+2.2. The Source Code version of Covered Code may be distributed only under the
+terms of this License or a future version of this License released under
+Section 6.1, and You must include a copy of this License with every copy of
+the Source Code You distribute. You may not offer or impose any terms on any
+Source Code version that alters or restricts the applicable version of this
+License or the recipients' rights hereunder. However, You may include an
+additional document offering the additional rights described in Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+made available in Source Code form under the terms of this License either on
+the same media as an Executable version or via an accepted Electronic
+Distribution Mechanism to anyone to whom you made an Executable version
+available; and if made available via Electronic Distribution Mechanism, must
+remain available for at least twelve (12) months after the date it initially
+became available, or at least six (6) months after a subsequent version of
+that particular Modification has been made available to such recipients. You
+are responsible for ensuring that the Source Code version remains available
+even if the Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+file documenting the changes You made to create that Covered Code and the date
+of any change. You must include a prominent statement that the Modification is
+derived, directly or indirectly, from Original Code provided by the Initial
+Developer and including the name of the Initial Developer in (a) the Source
+Code, and (b) in any notice in an Executable version or related documentation
+in which You describe the origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+intellectual property rights is required to exercise the rights granted by
+such Contributor under Sections 2.1 or 2.2, Contributor must include a text
+file with the Source Code distribution titled "LEGAL" which describes the
+claim and the party making the claim in sufficient detail that a recipient
+will know whom to contact. If Contributor obtains such knowledge after the
+Modification is made available as described in Section 3.2, Contributor shall
+promptly modify the LEGAL file in all copies Contributor makes available
+thereafter and shall take other steps (such as notifying appropriate mailing
+lists or newsgroups) reasonably calculated to inform those who received the
+Covered Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+interface and Contributor has knowledge of patent licenses which are
+reasonably necessary to implement that API, Contributor must also include this
+information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+Section 3.4(a) above, Contributor believes that Contributor's Modifications
+are Contributor's original creation(s) and/or Contributor has sufficient
+rights to grant the rights conveyed by this License.
+
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+Code. If it is not possible to put such notice in a particular Source Code
+file due to its structure, then You must include such notice in a location
+(such as a relevant directory) where a user would be likely to look for such a
+notice. If You created one or more Modification(s) You may add your name as a
+Contributor to the notice described in Exhibit A. You must also duplicate
+this License in any documentation for the Source Code where You describe
+recipients' rights or ownership rights relating to Covered Code. You may
+choose to offer, and to charge a fee for, warranty, support, indemnity or
+liability obligations to one or more recipients of Covered Code. However, You
+may do so only on Your own behalf, and not on behalf of the Initial Developer
+or any Contributor. You must make it absolutely clear than any such warranty,
+support, indemnity or liability obligation is offered by You alone, and You
+hereby agree to indemnify the Initial Developer and every Contributor for any
+liability incurred by the Initial Developer or such Contributor as a result of
+warranty, support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+requirements of Section 3.1-3.5 have been met for that Covered Code, and if
+You include a notice stating that the Source Code version of the Covered Code
+is available under the terms of this License, including a description of how
+and where You have fulfilled the obligations of Section 3.2. The notice must
+be conspicuously included in any notice in an Executable version, related
+documentation or collateral in which You describe recipients' rights relating
+to the Covered Code. You may distribute the Executable version of Covered Code
+or ownership rights under a license of Your choice, which may contain terms
+different from this License, provided that You are in compliance with the
+terms of this License and that the license for the Executable version does not
+attempt to limit or alter the recipient's rights in the Source Code version
+from the rights set forth in this License. If You distribute the Executable
+version under a different license You must make it absolutely clear that any
+terms which differ from this License are offered by You alone, not by the
+Initial Developer or any Contributor. You hereby agree to indemnify the
+Initial Developer and every Contributor for any liability incurred by the
+Initial Developer or such Contributor as a result of any such terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+not governed by the terms of this License and distribute the Larger Work as a
+single product. In such a case, You must make sure the requirements of this
+License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Code due to statute,
+judicial order, or regulation then You must: (a) comply with the terms of this
+License to the maximum extent possible; and (b) describe the limitations and
+the code they affect. Such description must be included in the LEGAL file
+described in Section 3.4 and must be included with all distributions of the
+Source Code. Except to the extent prohibited by statute or regulation, such
+description must be sufficiently detailed for a recipient of ordinary skill to
+be able to understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has attached
+the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+and/or new versions of the License from time to time. Each version will be
+given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+License, You may always continue to use it under the terms of that version.
+You may also choose to use such Covered Code under the terms of any subsequent
+version of the License published by Netscape. No one other than Netscape has
+the right to modify the terms applicable to Covered Code created under this
+License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+only do in order to apply it to code which is not already Covered Code
+governed by this License), You must (a) rename Your license so that the
+phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or
+any confusingly similar phrase do not appear in your license (except to note
+that your license differs from this License) and (b) otherwise make it clear
+that Your version of the license contains terms which differ from the Mozilla
+Public License and Netscape Public License. (Filling in the name of the
+Initial Developer, Original Code or Contributor in the notice described in
+Exhibit A shall not of themselves be deemed to be modifications of this
+License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT
+LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE,
+FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE
+QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED
+CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY
+OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR
+CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
+LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+automatically if You fail to comply with terms herein and fail to cure such
+breach within 30 days of becoming aware of the breach. All sublicenses to the
+Covered Code which are properly granted shall survive any termination of this
+License. Provisions which, by their nature, must remain in effect beyond the
+termination of this License shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+claim (excluding declatory judgment actions) against Initial Developer or a
+Contributor (the Initial Developer or Contributor against whom You file such
+action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+infringes any patent, then any and all rights granted by such Participant to
+You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice
+from Participant terminate prospectively, unless if within 60 days after
+receipt of notice You either: (i) agree in writing to pay Participant a
+mutually agreeable reasonable royalty for Your past and future use of
+Modifications made by such Participant, or (ii) withdraw Your litigation claim
+with respect to the Contributor Version against such Participant. If within
+60 days of notice, a reasonable royalty and payment arrangement are not
+mutually agreed upon in writing by the parties or the litigation claim is not
+withdrawn, the rights granted by Participant to You under Sections 2.1 and/or
+2.2 automatically terminate at the expiration of the 60 day notice period
+specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+Contributor Version, directly or indirectly infringes any patent, then any
+rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are
+revoked effective as of the date You first made, used, sold, distributed, or
+had made, Modifications made by that Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+alleging that such Participant's Contributor Version directly or indirectly
+infringes any patent where such claim is resolved (such as by license or
+settlement) prior to the initiation of patent infringement litigation, then
+the reasonable value of the licenses granted by such Participant under
+Sections 2.1 or 2.2 shall be taken into account in determining the amount or
+value of any payment or license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above, all
+end user license agreements (excluding distributors and resellers) which have
+been validly granted by You or any distributor hereunder prior to termination
+shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY
+SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT,
+SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING,
+WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER
+FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES,
+EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH
+DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH
+OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
+APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
+EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in 48
+C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and
+"commercial computer software documentation," as such terms are used in 48
+C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R.
+227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users
+acquire Covered Code with only those rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject matter
+hereof. If any provision of this License is held to be unenforceable, such
+provision shall be reformed only to the extent necessary to make it
+enforceable. This License shall be governed by California law provisions
+(except to the extent applicable law, if any, provides otherwise), excluding
+its conflict-of-law provisions. With respect to disputes in which at least one
+party is a citizen of, or an entity chartered or registered to do business in
+the United States of America, any litigation relating to this License shall be
+subject to the jurisdiction of the Federal Courts of the Northern District of
+California, with venue lying in Santa Clara County, California, with the
+losing party responsible for costs, including without limitation, court costs
+and reasonable attorneys' fees and expenses. The application of the United
+Nations Convention on Contracts for the International Sale of Goods is
+expressly excluded. Any law or regulation which provides that the language of
+a contract shall be construed against the drafter shall not apply to this
+License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+responsible for claims and damages arising, directly or indirectly, out of its
+utilization of rights under this License and You agree to work with Initial
+Developer and Contributors to distribute such responsibility on an equitable
+basis. Nothing herein is intended or shall be deemed to constitute any
+admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+Multiple-Licensed. Multiple-Licensed means that the Initial Developer permits
+you to utilize portions of the Covered Code under Your choice of the MPL or
+the alternative licenses, if any, specified by the Initial Developer in the
+file described in Exhibit A.
+
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+Version 1.1 (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.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+basis, WITHOUT WARRANTY OF
+ ANY KIND, either express or implied. See the License for the specific
+language governing rights and
+ limitations under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+Portions created by
+ ______________________ are Copyright (C) ______
+_______________________. All Rights
+ Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms of
+the _____ license (the [___] License), in which case the provisions of
+[______] License are applicable instead of those above. If you wish to allow
+use of your version of this file only under the terms of the [____] License
+and not to allow others to use your version of this file under the MPL,
+indicate your decision by deleting the provisions above and replace them
+with the notice and other provisions required by the [___] License. If you do
+not delete the provisions above, a recipient may use your version of this file
+under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+the notices in the Source Code files of the Original Code. You should use the
+text of this Exhibit A rather than the text found in the Original Code Source
+Code for Your Modifications.]
+
+
+===============================================================================
+
+For the JAX-WS Reference Implementation component:
+
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+
+ 1. Definitions.
+
+ 1.1. "Contributor" means each individual or entity that
+ creates or contributes to the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the
+ Original Software, prior Modifications used by a
+ Contributor (if any), and the Modifications made by that
+ particular Contributor.
+
+ 1.3. "Covered Software" means (a) the Original Software, or
+ (b) Modifications, or (c) the combination of files
+ containing Original Software with files containing
+ Modifications, in each case including portions thereof.
+
+ 1.4. "Executable" means the Covered Software in any form
+ other than Source Code.
+
+ 1.5. "Initial Developer" means the individual or entity
+ that first makes Original Software available under this
+ License.
+
+ 1.6. "Larger Work" means a work which combines Covered
+ Software or portions thereof with code not governed by the
+ terms of this License.
+
+ 1.7. "License" means this document.
+
+ 1.8. "Licensable" means having the right to grant, to the
+ maximum extent possible, whether at the time of the initial
+ grant or subsequently acquired, any and all of the rights
+ conveyed herein.
+
+ 1.9. "Modifications" means the Source Code and Executable
+ form of any of the following:
+
+ A. Any file that results from an addition to,
+ deletion from or modification of the contents of a
+ file containing Original Software or previous
+ Modifications;
+
+ B. Any new file that contains any part of the
+ Original Software or previous Modification; or
+
+ C. Any new file that is contributed or otherwise made
+ available under the terms of this License.
+
+ 1.10. "Original Software" means the Source Code and
+ Executable form of computer software code that is
+ originally released under this License.
+
+ 1.11. "Patent Claims" means any patent claim(s), now owned
+ or hereafter acquired, including without limitation,
+ method, process, and apparatus claims, in any patent
+ Licensable by grantor.
+
+ 1.12. "Source Code" means (a) the common form of computer
+ software code in which modifications are made and (b)
+ associated documentation included in or with such code.
+
+ 1.13. "You" (or "Your") means an individual or a legal
+ entity exercising rights under, and complying with all of
+ the terms of, this License. For legal entities, "You"
+ includes any entity which controls, is controlled by, or is
+ under common control with You. For purposes of this
+ definition, "control" means (a) the power, direct or
+ indirect, to cause the direction or management of such
+ entity, whether by contract or otherwise, or (b) ownership
+ of more than fifty percent (50%) of the outstanding shares
+ or beneficial ownership of such entity.
+
+ 2. License Grants.
+
+ 2.1. The Initial Developer Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and
+ subject to third party intellectual property claims, the
+ Initial Developer hereby grants You a world-wide,
+ royalty-free, non-exclusive license:
+
+ (a) under intellectual property rights (other than
+ patent or trademark) Licensable by Initial Developer,
+ to use, reproduce, modify, display, perform,
+ sublicense and distribute the Original Software (or
+ portions thereof), with or without Modifications,
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making,
+ using or selling of Original Software, to make, have
+ made, use, practice, sell, and offer for sale, and/or
+ otherwise dispose of the Original Software (or
+ portions thereof).
+
+ (c) The licenses granted in Sections 2.1(a) and (b)
+ are effective on the date Initial Developer first
+ distributes or otherwise makes the Original Software
+ available to a third party under the terms of this
+ License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent
+ license is granted: (1) for code that You delete from
+ the Original Software, or (2) for infringements
+ caused by: (i) the modification of the Original
+ Software, or (ii) the combination of the Original
+ Software with other software or devices.
+
+ 2.2. Contributor Grant.
+
+ Conditioned upon Your compliance with Section 3.1 below and
+ subject to third party intellectual property claims, each
+ Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ (a) under intellectual property rights (other than
+ patent or trademark) Licensable by Contributor to
+ use, reproduce, modify, display, perform, sublicense
+ and distribute the Modifications created by such
+ Contributor (or portions thereof), either on an
+ unmodified basis, with other Modifications, as
+ Covered Software and/or as part of a Larger Work; and
+
+
+ (b) under Patent Claims infringed by the making,
+ using, or selling of Modifications made by that
+ Contributor either alone and/or in combination with
+ its Contributor Version (or portions of such
+ combination), to make, use, sell, offer for sale,
+ have made, and/or otherwise dispose of: (1)
+ Modifications made by that Contributor (or portions
+ thereof); and (2) the combination of Modifications
+ made by that Contributor with its Contributor Version
+ (or portions of such combination).
+
+ (c) The licenses granted in Sections 2.2(a) and
+ 2.2(b) are effective on the date Contributor first
+ distributes or otherwise makes the Modifications
+ available to a third party.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent
+ license is granted: (1) for any code that Contributor
+ has deleted from the Contributor Version; (2) for
+ infringements caused by: (i) third party
+ modifications of Contributor Version, or (ii) the
+ combination of Modifications made by that Contributor
+ with other software (except as part of the
+ Contributor Version) or other devices; or (3) under
+ Patent Claims infringed by Covered Software in the
+ absence of Modifications made by that Contributor.
+
+ 3. Distribution Obligations.
+
+ 3.1. Availability of Source Code.
+
+ Any Covered Software that You distribute or otherwise make
+ available in Executable form must also be made available in
+ Source Code form and that Source Code form must be
+ distributed only under the terms of this License. You must
+ include a copy of this License with every copy of the
+ Source Code form of the Covered Software You distribute or
+ otherwise make available. You must inform recipients of any
+ such Covered Software in Executable form as to how they can
+ obtain such Covered Software in Source Code form in a
+ reasonable manner on or through a medium customarily used
+ for software exchange.
+
+ 3.2. Modifications.
+
+ The Modifications that You create or to which You
+ contribute are governed by the terms of this License. You
+ represent that You believe Your Modifications are Your
+ original creation(s) and/or You have sufficient rights to
+ grant the rights conveyed by this License.
+
+ 3.3. Required Notices.
+
+ You must include a notice in each of Your Modifications
+ that identifies You as the Contributor of the Modification.
+ You may not remove or alter any copyright, patent or
+ trademark notices contained within the Covered Software, or
+ any notices of licensing or any descriptive text giving
+ attribution to any Contributor or the Initial Developer.
+
+ 3.4. Application of Additional Terms.
+
+ You may not offer or impose any terms on any Covered
+ Software in Source Code form that alters or restricts the
+ applicable version of this License or the recipients'
+ rights hereunder. You may choose to offer, and to charge a
+ fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Software.
+ However, you may do so only on Your own behalf, and not on
+ behalf of the Initial Developer or any Contributor. You
+ must make it absolutely clear that any such warranty,
+ support, indemnity or liability obligation is offered by
+ You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred
+ by the Initial Developer or such Contributor as a result of
+ warranty, support, indemnity or liability terms You offer.
+
+
+ 3.5. Distribution of Executable Versions.
+
+ You may distribute the Executable form of the Covered
+ Software under the terms of this License or under the terms
+ of a license of Your choice, which may contain terms
+ different from this License, provided that You are in
+ compliance with the terms of this License and that the
+ license for the Executable form does not attempt to limit
+ or alter the recipient's rights in the Source Code form
+ from the rights set forth in this License. If You
+ distribute the Covered Software in Executable form under a
+ different license, You must make it absolutely clear that
+ any terms which differ from this License are offered by You
+ alone, not by the Initial Developer or Contributor. You
+ hereby agree to indemnify the Initial Developer and every
+ Contributor for any liability incurred by the Initial
+ Developer or such Contributor as a result of any such terms
+ You offer.
+
+ 3.6. Larger Works.
+
+ You may create a Larger Work by combining Covered Software
+ with other code not governed by the terms of this License
+ and distribute the Larger Work as a single product. In such
+ a case, You must make sure the requirements of this License
+ are fulfilled for the Covered Software.
+
+ 4. Versions of the License.
+
+ 4.1. New Versions.
+
+ Sun Microsystems, Inc. is the initial license steward and
+ may publish revised and/or new versions of this License
+ from time to time. Each version will be given a
+ distinguishing version number. Except as provided in
+ Section 4.3, no one other than the license steward has the
+ right to modify this License.
+
+ 4.2. Effect of New Versions.
+
+ You may always continue to use, distribute or otherwise
+ make the Covered Software available under the terms of the
+ version of the License under which You originally received
+ the Covered Software. If the Initial Developer includes a
+ notice in the Original Software prohibiting it from being
+ distributed or otherwise made available under any
+ subsequent version of the License, You must distribute and
+ make the Covered Software available under the terms of the
+ version of the License under which You originally received
+ the Covered Software. Otherwise, You may also choose to
+ use, distribute or otherwise make the Covered Software
+ available under the terms of any subsequent version of the
+ License published by the license steward.
+
+ 4.3. Modified Versions.
+
+ When You are an Initial Developer and You want to create a
+ new license for Your Original Software, You may create and
+ use a modified version of this License if You: (a) rename
+ the license and remove any references to the name of the
+ license steward (except to note that the license differs
+ from this License); and (b) otherwise make it clear that
+ the license contains terms which differ from this License.
+
+
+ 5. DISCLAIMER OF WARRANTY.
+
+ COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
+ BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+ INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
+ SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
+ PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
+ COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+ INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
+ ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
+ WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+ DISCLAIMER.
+
+ 6. TERMINATION.
+
+ 6.1. This License and the rights granted hereunder will
+ terminate automatically if You fail to comply with terms
+ herein and fail to cure such breach within 30 days of
+ becoming aware of the breach. Provisions which, by their
+ nature, must remain in effect beyond the termination of
+ this License shall survive.
+
+ 6.2. If You assert a patent infringement claim (excluding
+ declaratory judgment actions) against Initial Developer or
+ a Contributor (the Initial Developer or Contributor against
+ whom You assert such claim is referred to as "Participant")
+ alleging that the Participant Software (meaning the
+ Contributor Version where the Participant is a Contributor
+ or the Original Software where the Participant is the
+ Initial Developer) directly or indirectly infringes any
+ patent, then any and all rights granted directly or
+ indirectly to You by such Participant, the Initial
+ Developer (if the Initial Developer is not the Participant)
+ and all Contributors under Sections 2.1 and/or 2.2 of this
+ License shall, upon 60 days notice from Participant
+ terminate prospectively and automatically at the expiration
+ of such 60 day notice period, unless if within such 60 day
+ period You withdraw Your claim with respect to the
+ Participant Software against such Participant either
+ unilaterally or pursuant to a written agreement with
+ Participant.
+
+ 6.3. In the event of termination under Sections 6.1 or 6.2
+ above, all end user licenses that have been validly granted
+ by You or any distributor hereunder prior to termination
+ (excluding licenses granted to You by any distributor)
+ shall survive termination.
+
+ 7. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
+ INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
+ COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
+ LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
+ LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
+ STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
+ INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
+ APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
+ NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
+ CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
+ APPLY TO YOU.
+
+ 8. U.S. GOVERNMENT END USERS.
+
+ The Covered Software is a "commercial item," as that term is
+ defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
+ computer software" (as that term is defined at 48 C.F.R.
+ 252.227-7014(a)(1)) and "commercial computer software
+ documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
+ 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
+ through 227.7202-4 (June 1995), all U.S. Government End Users
+ acquire Covered Software with only those rights set forth herein.
+ This U.S. Government Rights clause is in lieu of, and supersedes,
+ any other FAR, DFAR, or other clause or provision that addresses
+ Government rights in computer software under this License.
+
+ 9. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the
+ extent necessary to make it enforceable. This License shall be
+ governed by the law of the jurisdiction specified in a notice
+ contained within the Original Software (except to the extent
+ applicable law, if any, provides otherwise), excluding such
+ jurisdiction's conflict-of-law provisions. Any litigation
+ relating to this License shall be subject to the jurisdiction of
+ the courts located in the jurisdiction and venue specified in a
+ notice contained within the Original Software, with the losing
+ party responsible for costs, including, without limitation, court
+ costs and reasonable attorneys' fees and expenses. The
+ application of the United Nations Convention on Contracts for the
+ International Sale of Goods is expressly excluded. Any law or
+ regulation which provides that the language of a contract shall
+ be construed against the drafter shall not apply to this License.
+ You agree that You alone are responsible for compliance with the
+ United States export administration regulations (and the export
+ control laws and regulation of any other countries) when You use,
+ distribute or otherwise make available any Covered Software.
+
+ 10. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or
+ indirectly, out of its utilization of rights under this License
+ and You agree to work with Initial Developer and Contributors to
+ distribute such responsibility on an equitable basis. Nothing
+ herein is intended or shall be deemed to constitute any admission
+ of liability.
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/MANIFEST.MF b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..cfdce9ed00
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Extension-Name: tuscany-das-rdb
+Specification-Title: Tuscany DAS for Relational Databases
+Specification-Vendor: Apache Software Foundation
+Implementation-Vendor: Apache Software Foundation
+Implementation-Vendor-Id: org.apache
+Implementation-Title: tuscany-das-rdb
+Implementation-Version: incubating-M1
+Bundle-ManifestVersion: 2
+Bundle-Name: Tuscany DAS for Relational Databases
+Bundle-SymbolicName: org.apache.tuscany.das.rdb
+Bundle-Version: 1.0.0
+Bundle-Vendor: Apache Software Foundation
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/NOTICE b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000000..d48810c0ec
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,18 @@
+=========================================================================
+== NOTICE file corresponding to the section 4 d of ==
+== the Apache License, Version 2.0, ==
+== in this case for the Apache Tuscany distribution. ==
+=========================================================================
+
+This product includes software developed by the Apache Software Foundation
+(http://www.apache.org/).
+
+This product also includes software developed by:
+- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/)
+- the Celtix project (http://celtix.objectweb.org/)
+- the Mozilla Rhino project (http://www.mozilla.org/rhino/)
+- the GlassFish JAX-WS project (https://jax-ws.dev.java.net/)
+
+Please read the LICENSE.txt file present in the root directory of this
+distribution.
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/README.txt b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/README.txt
new file mode 100644
index 0000000000..9b26d1690a
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/META-INF/README.txt
@@ -0,0 +1,35 @@
+Apache Tuscany M1 build (May, 2006)
+===================================
+
+http://incubator.apache.org/tuscany/
+
+Tuscany is an effort undergoing incubation at the Apache Software Foundation
+(ASF), sponsored by the Web Services PMC.
+
+Incubation is required of all newly accepted projects until a further review
+indicates that the infrastructure, communications, and decision making process
+have stabilized in a manner consistent with other successful ASF projects.
+
+While incubation status is not necessarily a reflection of the completeness or
+stability of the code, it does indicate that the project has yet to be fully
+endorsed by the ASF.
+
+
+Support
+-------
+
+Any problem with this release can be reported to the Tuscany mailing list
+or in the JIRA issue tracker.
+
+Mailing list subscription:
+ tuscany-dev-subscribe@ws.apache.org
+
+Jira:
+ http://issues.apache.org/jira/browse/Tuscany
+
+
+Thank you for using Tuscany!
+
+
+The Tuscany Team.
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/config.xsd b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/config.xsd
new file mode 100644
index 0000000000..031f5a9546
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/config.xsd
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<xsd:schema xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:org.apache.tuscany.das.rdb.config="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ecore:nsPrefix="org.apache.tuscany.das.rdb.config" ecore:package="org.apache.tuscany.das.rdb.config" targetNamespace="http:///org.apache.tuscany.das.rdb/config.xsd">
+ <xsd:import namespace="http://www.eclipse.org/emf/2002/Ecore" schemaLocation="platform:/plugin/org.eclipse.emf.ecore/model/Ecore.xsd"/>
+ <xsd:element ecore:ignore="true" name="Config" type="org.apache.tuscany.das.rdb.config:Config"/>
+ <xsd:element ecore:ignore="true" name="Command" type="org.apache.tuscany.das.rdb.config:Command"/>
+ <xsd:element ecore:ignore="true" name="ConnectionProperties" type="org.apache.tuscany.das.rdb.config:ConnectionProperties"/>
+ <xsd:element ecore:ignore="true" name="Parameter" type="org.apache.tuscany.das.rdb.config:Parameter"/>
+ <xsd:element ecore:ignore="true" name="Relationship" type="org.apache.tuscany.das.rdb.config:Relationship"/>
+ <xsd:element ecore:ignore="true" name="Table" type="org.apache.tuscany.das.rdb.config:Table"/>
+ <xsd:element ecore:ignore="true" name="KeyPair" type="org.apache.tuscany.das.rdb.config:KeyPair"/>
+ <xsd:element ecore:ignore="true" name="Column" type="org.apache.tuscany.das.rdb.config:Column"/>
+ <xsd:element ecore:ignore="true" name="ResultDescriptor" type="org.apache.tuscany.das.rdb.config:ResultDescriptor"/>
+ <xsd:complexType name="Config">
+ <xsd:sequence>
+ <xsd:element ecore:opposite="Config" ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="Command" type="org.apache.tuscany.das.rdb.config:Command"/>
+ <xsd:element ecore:opposite="Config" ecore:resolveProxies="true" minOccurs="0" name="ConnectionProperties" type="org.apache.tuscany.das.rdb.config:ConnectionProperties"/>
+ <xsd:element ecore:opposite="Config" ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="Table" type="org.apache.tuscany.das.rdb.config:Table"/>
+ <xsd:element ecore:opposite="Config" ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="Relationship" type="org.apache.tuscany.das.rdb.config:Relationship"/>
+ </xsd:sequence>
+ <xsd:attribute name="uri" type="xsd:string"/>
+ </xsd:complexType>
+ <xsd:complexType name="Command">
+ <xsd:sequence>
+ <xsd:element ecore:opposite="Command" ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="Parameter" type="org.apache.tuscany.das.rdb.config:Parameter"/>
+ <xsd:element ecore:opposite="Command" ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="ResultDescriptor" type="org.apache.tuscany.das.rdb.config:ResultDescriptor"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SQL" type="xsd:string"/>
+ <xsd:attribute name="kind" type="xsd:string"/>
+ <xsd:attribute ecore:opposite="Command" ecore:reference="org.apache.tuscany.das.rdb.config:Config" ecore:transient="true" name="Config" type="xsd:anyURI"/>
+ </xsd:complexType>
+ <xsd:complexType name="ConnectionProperties">
+ <xsd:attribute name="dataSource" type="xsd:string"/>
+ <xsd:attribute name="driverClassName" type="xsd:string"/>
+ <xsd:attribute name="driverURL" type="xsd:string"/>
+ <xsd:attribute name="driverPassword" type="xsd:string"/>
+ <xsd:attribute name="driverUserName" type="xsd:string"/>
+ <xsd:attribute ecore:opposite="ConnectionProperties" ecore:reference="org.apache.tuscany.das.rdb.config:Config" ecore:transient="true" name="Config" type="xsd:anyURI"/>
+ </xsd:complexType>
+ <xsd:complexType name="Parameter">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="columnType" type="xsd:string"/>
+ <xsd:attribute ecore:opposite="Parameter" ecore:reference="org.apache.tuscany.das.rdb.config:Command" ecore:transient="true" name="Command" type="xsd:anyURI"/>
+ </xsd:complexType>
+ <xsd:complexType name="Relationship">
+ <xsd:sequence>
+ <xsd:element ecore:opposite="Relationship" ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="KeyPair" type="org.apache.tuscany.das.rdb.config:KeyPair"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="primaryKeyTable" type="xsd:string"/>
+ <xsd:attribute name="foreignKeyTable" type="xsd:string"/>
+ <xsd:attribute name="many" type="xsd:boolean"/>
+ <xsd:attribute ecore:opposite="Relationship" ecore:reference="org.apache.tuscany.das.rdb.config:Config" ecore:transient="true" name="Config" type="xsd:anyURI"/>
+ </xsd:complexType>
+ <xsd:complexType name="Table">
+ <xsd:sequence>
+ <xsd:element ecore:opposite="Table" ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="Column" type="org.apache.tuscany.das.rdb.config:Column"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="propertyName" type="xsd:string"/>
+ <xsd:attribute name="create" type="xsd:string"/>
+ <xsd:attribute name="update" type="xsd:string"/>
+ <xsd:attribute name="delete" type="xsd:string"/>
+ <xsd:attribute ecore:opposite="Table" ecore:reference="org.apache.tuscany.das.rdb.config:Config" ecore:transient="true" name="Config" type="xsd:anyURI"/>
+ </xsd:complexType>
+ <xsd:complexType name="KeyPair">
+ <xsd:attribute name="primaryKeyColumn" type="xsd:string"/>
+ <xsd:attribute name="foreignKeyColumn" type="xsd:string"/>
+ <xsd:attribute ecore:opposite="KeyPair" ecore:reference="org.apache.tuscany.das.rdb.config:Relationship" ecore:transient="true" name="Relationship" type="xsd:anyURI"/>
+ </xsd:complexType>
+ <xsd:complexType name="Column">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="propertyName" type="xsd:string"/>
+ <xsd:attribute name="converterClassName" type="xsd:string"/>
+ <xsd:attribute name="columnType" type="xsd:string"/>
+ <xsd:attribute name="primaryKey" type="xsd:boolean"/>
+ <xsd:attribute name="generated" type="xsd:boolean"/>
+ <xsd:attribute name="collision" type="xsd:boolean"/>
+ <xsd:attribute ecore:opposite="Column" ecore:reference="org.apache.tuscany.das.rdb.config:Table" ecore:transient="true" name="Table" type="xsd:anyURI"/>
+ </xsd:complexType>
+ <xsd:complexType name="ResultDescriptor">
+ <xsd:attribute name="columnName" type="xsd:string"/>
+ <xsd:attribute name="tableName" type="xsd:string"/>
+ <xsd:attribute name="columnType" type="xsd:string"/>
+ <xsd:attribute name="converter" type="xsd:string"/>
+ <xsd:attribute ecore:opposite="ResultDescriptor" ecore:reference="org.apache.tuscany.das.rdb.config:Command" ecore:transient="true" name="Command" type="xsd:anyURI"/>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/dasmodel4.mdl b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/dasmodel4.mdl
new file mode 100644
index 0000000000..1de7601cab
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/main/resources/dasmodel4.mdl
@@ -0,0 +1,4645 @@
+
+(object Petal
+ version 42
+ _written "Rose 4.5.8163.3"
+ charSet 0)
+
+(object Design "Logical View"
+ is_unit TRUE
+ is_loaded TRUE
+ defaults (object defaults
+ rightMargin 0.250000
+ leftMargin 0.250000
+ topMargin 0.250000
+ bottomMargin 0.500000
+ pageOverlap 0.250000
+ clipIconLabels TRUE
+ autoResize TRUE
+ snapToGrid TRUE
+ gridX 31
+ gridY 31
+ defaultFont (object Font
+ size 10
+ face "Arial"
+ bold FALSE
+ italics FALSE
+ underline FALSE
+ strike FALSE
+ color 0
+ default_color TRUE)
+ showMessageNum 3
+ showClassOfObject TRUE
+ notation "Unified")
+ root_usecase_package (object Class_Category "Use Case View"
+ quid "4362A29901BA"
+ exportControl "Public"
+ global TRUE
+ logical_models (list unit_reference_list)
+ logical_presentations (list unit_reference_list
+ (object UseCaseDiagram "Main"
+ quid "4362A2990259"
+ title "Main"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list))))
+ root_category (object Class_Category "Logical View"
+ quid "4362A29901B9"
+ exportControl "Public"
+ global TRUE
+ subsystem "Component View"
+ quidu "4362A29901BB"
+ logical_models (list unit_reference_list
+ (object Class_Category "config"
+ attributes (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "nsURI"
+ value "http:///org.apache.tuscany.das.rdb/config.xsd")
+ (object Attribute
+ tool "Ecore"
+ name "basePackage"
+ value "org.apache.tuscany.das.rdb"))
+ quid "4362A2A10169"
+ exportControl "Public"
+ logical_models (list unit_reference_list
+ (object Class "Config"
+ quid "4362A2DE0045"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "uri"
+ quid "4362A337006B"
+ type "String")))
+ (object Class "Command"
+ quid "4362A2EC01FE"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "name"
+ quid "4362A3EC02EC"
+ type "String")
+ (object ClassAttribute "SQL"
+ quid "4362A3EF0246"
+ type "String")
+ (object ClassAttribute "kind"
+ quid "437903E60321"
+ type "String")))
+ (object Class "ConnectionProperties"
+ quid "4362A2FD0085"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "dataSource"
+ quid "4362A35A035A"
+ type "String")
+ (object ClassAttribute "driverClassName"
+ quid "4362A36D0203"
+ type "String")
+ (object ClassAttribute "driverURL"
+ quid "4362A3740330"
+ type "String")
+ (object ClassAttribute "driverPassword"
+ quid "4362A384022E"
+ type "String")
+ (object ClassAttribute "driverUserName"
+ quid "4378E1B303C2"
+ type "String")))
+ (object Class "Parameter"
+ quid "4362A3C902BA"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "name"
+ quid "4362A40600D7"
+ type "String")
+ (object ClassAttribute "columnType"
+ quid "4362A4090280"
+ type "String")))
+ (object Class "Relationship"
+ quid "4362A42E03A5"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "name"
+ quid "4362A73A0216"
+ type "String")
+ (object ClassAttribute "primaryKeyTable"
+ quid "4362A73D0329"
+ type "String")
+ (object ClassAttribute "foreignKeyTable"
+ quid "4362A74002FB"
+ type "String")
+ (object ClassAttribute "many"
+ quid "4362A7430241"
+ type "boolean")))
+ (object Class "Table"
+ quid "4362A43C0002"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "name"
+ quid "4362A7B2031D"
+ type "String")
+ (object ClassAttribute "propertyName"
+ quid "4362A7C203A2"
+ type "String")
+ (object ClassAttribute "create"
+ quid "4362A7D0024E"
+ type "String")
+ (object ClassAttribute "update"
+ quid "4362A7D30220"
+ type "String")
+ (object ClassAttribute "delete"
+ quid "4362A7E1031B"
+ type "String")))
+ (object Class "KeyPair"
+ quid "4362A72E0010"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "primaryKeyColumn"
+ quid "4362A8E702A9"
+ type "String")
+ (object ClassAttribute "foreignKeyColumn"
+ quid "4362A8ED01AE"
+ type "String")))
+ (object Class "Column"
+ quid "4362A75C016B"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "name"
+ quid "4362A8BD02E5"
+ type "String")
+ (object ClassAttribute "propertyName"
+ quid "4362A8C001C7"
+ type "String")
+ (object ClassAttribute "converterClassName"
+ quid "4362A8C303A2"
+ type "String")
+ (object ClassAttribute "columnType"
+ quid "4362A8C903A0"
+ type "String")
+ (object ClassAttribute "primaryKey"
+ quid "437907F200F9"
+ type "boolean")
+ (object ClassAttribute "generated"
+ quid "4379083900BF"
+ type "boolean")
+ (object ClassAttribute "collision"
+ quid "437908E5012B"
+ type "boolean")))
+ (object Class "ResultDescriptor"
+ quid "437B57EF0008"
+ class_attributes (list class_attribute_list
+ (object ClassAttribute "columnName"
+ quid "437B5A6503BB"
+ type "String")
+ (object ClassAttribute "tableName"
+ quid "437B5A6B016B"
+ type "String")
+ (object ClassAttribute "columnType"
+ quid "437B5A6D033A"
+ type "String")
+ (object ClassAttribute "converter"
+ quid "437B5A6F0153"
+ type "String"))
+ language "Java")
+ (object Association "$UNNAMED$0"
+ quid "4362A3030323"
+ roles (list role_list
+ (object Role "$UNNAMED$1"
+ quid "4362A3040108"
+ supplier "Logical View::config::Config"
+ quidu "4362A2DE0045"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$2"
+ quid "4362A3040109"
+ supplier "Logical View::config::Command"
+ quidu "4362A2EC01FE"
+ client_cardinality (value cardinality "0..n")
+ Containment "By Value"
+ is_navigable TRUE)))
+ (object Association "$UNNAMED$3"
+ quid "4362A308010D"
+ roles (list role_list
+ (object Role "$UNNAMED$4"
+ quid "4362A3090015"
+ supplier "Logical View::config::Config"
+ quidu "4362A2DE0045"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$5"
+ quid "4362A3090016"
+ supplier "Logical View::config::ConnectionProperties"
+ quidu "4362A2FD0085"
+ client_cardinality (value cardinality "0..1")
+ Containment "By Value"
+ is_navigable TRUE)))
+ (object Association "$UNNAMED$6"
+ quid "4362A3D302FA"
+ roles (list role_list
+ (object Role "$UNNAMED$7"
+ quid "4362A3D40143"
+ supplier "Logical View::config::Command"
+ quidu "4362A2EC01FE"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$8"
+ quid "4362A3D40144"
+ supplier "Logical View::config::Parameter"
+ quidu "4362A3C902BA"
+ client_cardinality (value cardinality "0..n")
+ Containment "By Value"
+ is_navigable TRUE)))
+ (object Association "$UNNAMED$9"
+ quid "4362A448026C"
+ roles (list role_list
+ (object Role "$UNNAMED$10"
+ quid "4362A4490105"
+ supplier "Logical View::config::Config"
+ quidu "4362A2DE0045"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$11"
+ quid "4362A4490106"
+ supplier "Logical View::config::Table"
+ quidu "4362A43C0002"
+ client_cardinality (value cardinality "0..n")
+ Containment "By Value"
+ is_navigable TRUE)))
+ (object Association "$UNNAMED$12"
+ quid "4362A44B0298"
+ roles (list role_list
+ (object Role "$UNNAMED$13"
+ quid "4362A44C01AA"
+ supplier "Logical View::config::Config"
+ quidu "4362A2DE0045"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$14"
+ quid "4362A44C01AB"
+ supplier "Logical View::config::Relationship"
+ quidu "4362A42E03A5"
+ client_cardinality (value cardinality "0..n")
+ Containment "By Value"
+ is_navigable TRUE)))
+ (object Association "$UNNAMED$15"
+ quid "4362A76302A1"
+ roles (list role_list
+ (object Role "$UNNAMED$16"
+ quid "4362A7640090"
+ supplier "Logical View::config::Table"
+ quidu "4362A43C0002"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$17"
+ quid "4362A7640091"
+ supplier "Logical View::config::Column"
+ quidu "4362A75C016B"
+ client_cardinality (value cardinality "0..n")
+ Containment "By Value"
+ is_navigable TRUE)))
+ (object Association "$UNNAMED$18"
+ quid "4362A771032E"
+ roles (list role_list
+ (object Role "$UNNAMED$19"
+ quid "4362A7720108"
+ supplier "Logical View::config::Relationship"
+ quidu "4362A42E03A5"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$20"
+ quid "4362A7720109"
+ supplier "Logical View::config::KeyPair"
+ quidu "4362A72E0010"
+ client_cardinality (value cardinality "0..n")
+ Containment "By Value"
+ is_navigable TRUE)))
+ (object Association "$UNNAMED$21"
+ quid "437B59A10066"
+ roles (list role_list
+ (object Role "$UNNAMED$22"
+ quid "437B59A30145"
+ supplier "Logical View::config::Command"
+ quidu "4362A2EC01FE"
+ Containment "By Value"
+ is_navigable TRUE
+ is_aggregate TRUE)
+ (object Role "$UNNAMED$23"
+ quid "437B59A30146"
+ supplier "Logical View::config::ResultDescriptor"
+ quidu "437B57EF0008"
+ client_cardinality (value cardinality "0..n")
+ Containment "By Value"
+ is_navigable TRUE))))
+ logical_presentations (list unit_reference_list
+ (object ClassDiagram "Main"
+ quid "4362A2A900AD"
+ title "Main"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list
+ (object ClassView "Class" "Logical View::config::KeyPair" @1
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1054, 1333)
+ label (object ItemLabel
+ Parent_View @1
+ location (809, 1227)
+ fill_color 13434879
+ nlines 1
+ max_width 490
+ justify 0
+ label "KeyPair")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A72E0010"
+ width 508
+ height 236
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::config::Column" @2
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (2015, 1519)
+ label (object ItemLabel
+ Parent_View @2
+ location (1756, 1288)
+ fill_color 13434879
+ nlines 1
+ max_width 518
+ justify 0
+ label "Column")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A75C016B"
+ width 536
+ height 486
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::config::ConnectionProperties" @3
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (2542, 248)
+ label (object ItemLabel
+ Parent_View @3
+ location (2317, 67)
+ fill_color 13434879
+ nlines 1
+ max_width 450
+ justify 0
+ label "ConnectionProperties")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A2FD0085"
+ width 468
+ height 386
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::config::Relationship" @4
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1054, 744)
+ label (object ItemLabel
+ Parent_View @4
+ location (829, 588)
+ fill_color 13434879
+ nlines 1
+ max_width 450
+ justify 0
+ label "Relationship")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A42E03A5"
+ width 468
+ height 336
+ autoResize TRUE)
+ (object AssociationViewNew "$UNNAMED$18" @5
+ location (1081, 1063)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A771032E"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$19" @6
+ Parent_View @5
+ location (-97, -84)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A7720108"
+ client @5
+ supplier @4
+ line_style 3
+ origin_attachment (1080, 1063)
+ terminal_attachment (1080, 912))
+ (object RoleView "$UNNAMED$20" @7
+ Parent_View @5
+ location (-97, -84)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A7720109"
+ client @5
+ supplier @1
+ line_style 3
+ origin_attachment (1080, 1063)
+ terminal_attachment (1080, 1215)
+ label (object SegLabel @8
+ Parent_View @7
+ location (1135, 1112)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..*"
+ pctDist 0.327273
+ height 55
+ orientation 0))))
+ (object ClassView "Class" "Logical View::config::Table" @9
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1984, 837)
+ label (object ItemLabel
+ Parent_View @9
+ location (1784, 656)
+ fill_color 13434879
+ nlines 1
+ max_width 400
+ justify 0
+ label "Table")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A43C0002"
+ width 418
+ height 386
+ autoResize TRUE)
+ (object AssociationViewNew "$UNNAMED$15" @10
+ location (1778, 1153)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A76302A1"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$16" @11
+ Parent_View @10
+ location (1003, 6)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A7640090"
+ client @10
+ supplier @9
+ line_style 3
+ origin_attachment (1778, 1153)
+ terminal_attachment (1778, 1030))
+ (object RoleView "$UNNAMED$17" @12
+ Parent_View @10
+ location (1003, 6)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A7640091"
+ client @10
+ supplier @2
+ line_style 3
+ origin_attachment (1778, 1153)
+ terminal_attachment (1778, 1276)
+ label (object SegLabel @13
+ Parent_View @12
+ location (1832, 1166)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..*"
+ pctDist 0.109091
+ height 54
+ orientation 0))))
+ (object ClassView "Class" "Logical View::config::Parameter" @14
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (186, 806)
+ label (object ItemLabel
+ Parent_View @14
+ location (4, 700)
+ fill_color 13434879
+ nlines 1
+ max_width 364
+ justify 0
+ label "Parameter")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A3C902BA"
+ width 382
+ height 236
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::config::Config" @15
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1054, 155)
+ label (object ItemLabel
+ Parent_View @15
+ location (959, 74)
+ fill_color 13434879
+ nlines 1
+ max_width 190
+ justify 0
+ label "Config")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A2DE0045"
+ width 208
+ height 186
+ autoResize TRUE)
+ (object AssociationViewNew "$UNNAMED$3" @16
+ location (1733, 184)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A308010D"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$4" @17
+ Parent_View @16
+ location (307, -498)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3090015"
+ client @16
+ supplier @15
+ line_style 3
+ origin_attachment (1733, 184)
+ terminal_attachment (1158, 184))
+ (object RoleView "$UNNAMED$5" @18
+ Parent_View @16
+ location (307, -498)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3090016"
+ client @16
+ supplier @3
+ line_style 3
+ origin_attachment (1733, 184)
+ terminal_attachment (2308, 184)
+ label (object SegLabel @19
+ Parent_View @18
+ location (2194, 126)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..1"
+ pctDist 0.801805
+ height 59
+ orientation 0))))
+ (object AssociationViewNew "$UNNAMED$12" @20
+ location (1054, 411)
+ label (object SegLabel @21
+ Parent_View @20
+ location (1054, 352)
+ font (object Font
+ italics TRUE)
+ hidden TRUE
+ anchor 1
+ anchor_loc 1
+ nlines 1
+ max_width 600
+ justify 0
+ label ""
+ pctDist 0.500000
+ height 60
+ orientation 0)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A44B0298"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$13" @22
+ Parent_View @20
+ location (-93, -395)
+ label (object SegLabel @23
+ Parent_View @22
+ location (1013, 281)
+ hidden TRUE
+ anchor 1
+ anchor_loc 1
+ nlines 1
+ max_width 252
+ justify 0
+ label ""
+ pctDist 0.800000
+ height 42
+ orientation 0)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A44C01AA"
+ client @20
+ supplier @15
+ line_style 0)
+ (object RoleView "$UNNAMED$14" @24
+ Parent_View @20
+ location (-93, -395)
+ label (object SegLabel @25
+ Parent_View @24
+ location (1013, 509)
+ hidden TRUE
+ anchor 1
+ anchor_loc 1
+ nlines 1
+ max_width 252
+ justify 0
+ label ""
+ pctDist 0.597561
+ height 42
+ orientation 1)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A44C01AB"
+ client @20
+ supplier @4
+ line_style 0
+ label (object SegLabel @26
+ Parent_View @24
+ location (1011, 558)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..*"
+ pctDist 0.899471
+ height 44
+ orientation 1))))
+ (object AssociationViewNew "$UNNAMED$9" @27
+ location (1666, 248)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A448026C"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$10" @28
+ Parent_View @27
+ location (860, -558)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A4490105"
+ client @27
+ supplier @15
+ line_style 3
+ origin_attachment (1667, 247)
+ terminal_attachment (1158, 247))
+ (object RoleView "$UNNAMED$11" @29
+ Parent_View @27
+ location (860, -558)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A4490106"
+ client @27
+ supplier @9
+ vertices (list Points
+ (1667, 247)
+ (1972, 247)
+ (1972, 644))
+ line_style 3
+ origin_attachment (1667, 247)
+ terminal_attachment (1972, 644)
+ label (object SegLabel @30
+ Parent_View @29
+ location (2031, 380)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..*"
+ pctDist 0.625538
+ height 59
+ orientation 0))))
+ (object ClassView "Class" "Logical View::config::Command" @31
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (186, 217)
+ label (object ItemLabel
+ Parent_View @31
+ location (63, 86)
+ fill_color 13434879
+ nlines 1
+ max_width 246
+ justify 0
+ label "Command")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A2EC01FE"
+ width 264
+ height 286
+ autoResize TRUE)
+ (object AssociationViewNew "$UNNAMED$6" @32
+ location (186, 523)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3D302FA"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$7" @33
+ Parent_View @32
+ location (-279, -500)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3D40143"
+ client @32
+ supplier @31
+ line_style 0)
+ (object RoleView "$UNNAMED$8" @34
+ Parent_View @32
+ location (-279, -500)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3D40144"
+ client @32
+ supplier @14
+ line_style 0
+ label (object SegLabel @35
+ Parent_View @34
+ location (241, 600)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..*"
+ pctDist 0.473684
+ height 55
+ orientation 0))))
+ (object AssociationViewNew "$UNNAMED$0" @36
+ location (634, 212)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3030323"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$1" @37
+ Parent_View @36
+ location (200, -470)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3040108"
+ client @36
+ supplier @15
+ line_style 3
+ origin_attachment (634, 212)
+ terminal_attachment (950, 212))
+ (object RoleView "$UNNAMED$2" @38
+ Parent_View @36
+ location (200, -470)
+ stereotype TRUE
+ line_color 3342489
+ quidu "4362A3040109"
+ client @36
+ supplier @31
+ line_style 3
+ origin_attachment (634, 212)
+ terminal_attachment (318, 212)
+ label (object SegLabel @39
+ Parent_View @38
+ location (371, 260)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..*"
+ pctDist 0.831858
+ height 48
+ orientation 0))))
+ (object ClassView "Class" "Logical View::config::ResultDescriptor" @40
+ ShowCompartmentStereotypes TRUE
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (465, 1240)
+ label (object ItemLabel
+ Parent_View @40
+ location (248, 1084)
+ fill_color 13434879
+ nlines 1
+ max_width 434
+ justify 0
+ label "ResultDescriptor")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "437B57EF0008"
+ width 452
+ height 336
+ annotation 8
+ autoResize TRUE)
+ (object AssociationViewNew "$UNNAMED$21" @41
+ location (484, 626)
+ stereotype TRUE
+ line_color 3342489
+ quidu "437B59A10066"
+ roleview_list (list RoleViews
+ (object RoleView "$UNNAMED$22" @42
+ Parent_View @41
+ location (50, -614)
+ stereotype TRUE
+ line_color 3342489
+ quidu "437B59A30145"
+ client @41
+ supplier @31
+ vertices (list Points
+ (484, 626)
+ (484, 347)
+ (318, 347))
+ line_style 3
+ origin_attachment (484, 626)
+ terminal_attachment (318, 347))
+ (object RoleView "$UNNAMED$23" @43
+ Parent_View @41
+ location (50, -614)
+ stereotype TRUE
+ line_color 3342489
+ quidu "437B59A30146"
+ client @41
+ supplier @40
+ line_style 3
+ origin_attachment (484, 626)
+ terminal_attachment (484, 1072)
+ label (object SegLabel @44
+ Parent_View @43
+ location (538, 1027)
+ anchor 2
+ anchor_loc 1
+ nlines 1
+ max_width 15
+ justify 0
+ label "0..*"
+ pctDist 0.900000
+ height 54
+ orientation 0)))))))))
+ logical_presentations (list unit_reference_list
+ (object ClassDiagram "Main"
+ quid "4362A299025A"
+ title "Main"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list
+ (object CategoryView "Logical View::config" @45
+ location (682, 589)
+ label (object ItemLabel
+ Parent_View @45
+ location (538, 505)
+ fill_color 13434879
+ nlines 2
+ max_width 288
+ justify 0
+ label "config")
+ icon_style "Icon"
+ line_color 3342489
+ fill_color 13434879
+ quidu "4362A2A10169"
+ width 300
+ height 180)))))
+ root_subsystem (object SubSystem "Component View"
+ quid "4362A29901BB"
+ physical_models (list unit_reference_list)
+ physical_presentations (list unit_reference_list
+ (object Module_Diagram "Main"
+ quid "4362A2990258"
+ title "Main"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list))))
+ process_structure (object Processes
+ quid "4362A29901BC"
+ ProcsNDevs (list
+ (object Process_Diagram "Deployment View"
+ quid "4362A29901BE"
+ title "Deployment View"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list))))
+ properties (object Properties
+ attributes (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "propertyId"
+ value "809135969")
+ (object Attribute
+ tool "Ecore"
+ name "default__Category"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "packageName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "nsPrefix"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "nsURI"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "basePackage"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "prefix"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "annotation"
+ value "")))
+ (object Attribute
+ tool "Ecore"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "classifierName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "constraints"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "xmlName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "xmlContentKind"
+ value ("ContentKind" 0))
+ (object Attribute
+ tool "Ecore"
+ name "ContentKind"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "Unspecified"
+ value 0)
+ (object Attribute
+ tool "Ecore"
+ name "Empty"
+ value 1)
+ (object Attribute
+ tool "Ecore"
+ name "Simple"
+ value 2)
+ (object Attribute
+ tool "Ecore"
+ name "Mixed"
+ value 3)
+ (object Attribute
+ tool "Ecore"
+ name "ElementOnly"
+ value 4)))
+ (object Attribute
+ tool "Ecore"
+ name "annotation"
+ value "")))
+ (object Attribute
+ tool "Ecore"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "operationName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "isUnique"
+ value TRUE)
+ (object Attribute
+ tool "Ecore"
+ name "annotation"
+ value "")))
+ (object Attribute
+ tool "Ecore"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "attributeName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "isTransient"
+ value FALSE)
+ (object Attribute
+ tool "Ecore"
+ name "isVolatile"
+ value FALSE)
+ (object Attribute
+ tool "Ecore"
+ name "isChangeable"
+ value TRUE)
+ (object Attribute
+ tool "Ecore"
+ name "isUnsettable"
+ value FALSE)
+ (object Attribute
+ tool "Ecore"
+ name "isUnique"
+ value TRUE)
+ (object Attribute
+ tool "Ecore"
+ name "isID"
+ value FALSE)
+ (object Attribute
+ tool "Ecore"
+ name "visibility"
+ value ("VisibilityKind" 0))
+ (object Attribute
+ tool "Ecore"
+ name "VisibilityKind"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "Unspecified"
+ value 0)
+ (object Attribute
+ tool "Ecore"
+ name "None"
+ value 1)
+ (object Attribute
+ tool "Ecore"
+ name "Read-only"
+ value 2)
+ (object Attribute
+ tool "Ecore"
+ name "Read-write"
+ value 3)
+ (object Attribute
+ tool "Ecore"
+ name "Read-only unsettable"
+ value 4)
+ (object Attribute
+ tool "Ecore"
+ name "Read-write unsettable"
+ value 5)))
+ (object Attribute
+ tool "Ecore"
+ name "xmlName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "xmlNamespace"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "xmlFeatureKind"
+ value ("FeatureKind" 0))
+ (object Attribute
+ tool "Ecore"
+ name "FeatureKind"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "Unspecified"
+ value 0)
+ (object Attribute
+ tool "Ecore"
+ name "Simple"
+ value 1)
+ (object Attribute
+ tool "Ecore"
+ name "Attribute"
+ value 2)
+ (object Attribute
+ tool "Ecore"
+ name "Element"
+ value 4)))
+ (object Attribute
+ tool "Ecore"
+ name "annotation"
+ value "")))
+ (object Attribute
+ tool "Ecore"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "referenceName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "isTransient"
+ value FALSE)
+ (object Attribute
+ tool "Ecore"
+ name "isVolatile"
+ value FALSE)
+ (object Attribute
+ tool "Ecore"
+ name "isChangeable"
+ value TRUE)
+ (object Attribute
+ tool "Ecore"
+ name "isUnsettable"
+ value FALSE)
+ (object Attribute
+ tool "Ecore"
+ name "isResolveProxies"
+ value TRUE)
+ (object Attribute
+ tool "Ecore"
+ name "visibility"
+ value ("VisibilityKind" 0))
+ (object Attribute
+ tool "Ecore"
+ name "VisibilityKind"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "Unspecified"
+ value 0)
+ (object Attribute
+ tool "Ecore"
+ name "None"
+ value 1)
+ (object Attribute
+ tool "Ecore"
+ name "Read-only"
+ value 2)
+ (object Attribute
+ tool "Ecore"
+ name "Read-write"
+ value 3)
+ (object Attribute
+ tool "Ecore"
+ name "Read-only unsettable"
+ value 4)
+ (object Attribute
+ tool "Ecore"
+ name "Read-write unsettable"
+ value 5)))
+ (object Attribute
+ tool "Ecore"
+ name "xmlName"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "xmlNamespace"
+ value "")
+ (object Attribute
+ tool "Ecore"
+ name "xmlFeatureKind"
+ value ("FeatureKind" 0))
+ (object Attribute
+ tool "Ecore"
+ name "FeatureKind"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Ecore"
+ name "Unspecified"
+ value 0)
+ (object Attribute
+ tool "Ecore"
+ name "Simple"
+ value 1)
+ (object Attribute
+ tool "Ecore"
+ name "Attribute"
+ value 2)
+ (object Attribute
+ tool "Ecore"
+ name "Element"
+ value 4)))
+ (object Attribute
+ tool "Ecore"
+ name "annotation"
+ value "")))
+ (object Attribute
+ tool "DDL"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "DDL"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "DDL"
+ name "Directory"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "DDL"
+ name "DataBase"
+ value ("DataBaseSet" 800))
+ (object Attribute
+ tool "DDL"
+ name "DataBaseSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "DDL"
+ name "ANSI"
+ value 800)
+ (object Attribute
+ tool "DDL"
+ name "Oracle"
+ value 801)
+ (object Attribute
+ tool "DDL"
+ name "SQLServer"
+ value 802)
+ (object Attribute
+ tool "DDL"
+ name "Sybase"
+ value 803)
+ (object Attribute
+ tool "DDL"
+ name "Watcom"
+ value 804)))
+ (object Attribute
+ tool "DDL"
+ name "PrimaryKeyColumnName"
+ value "Id")
+ (object Attribute
+ tool "DDL"
+ name "PrimaryKeyColumnType"
+ value "NUMBER(5)")
+ (object Attribute
+ tool "DDL"
+ name "ViewName"
+ value "V_")
+ (object Attribute
+ tool "DDL"
+ name "TableName"
+ value "T_")
+ (object Attribute
+ tool "DDL"
+ name "InheritSuffix"
+ value "_V")
+ (object Attribute
+ tool "DDL"
+ name "DropClause"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "BaseViews"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "DDLScriptFilename"
+ value "DDL1.SQL")))
+ (object Attribute
+ tool "DDL"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "DDL"
+ name "ColumnType"
+ value "VARCHAR")
+ (object Attribute
+ tool "DDL"
+ name "Length"
+ value "")
+ (object Attribute
+ tool "DDL"
+ name "NullsOK"
+ value TRUE)
+ (object Attribute
+ tool "DDL"
+ name "PrimaryKey"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "Unique"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "CompositeUnique"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "CheckConstraint"
+ value "")))
+ (object Attribute
+ tool "DDL"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "framework"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "IDL"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "CreateMissingDirectories"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "StopOnError"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "Directory"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "GeneratePreserveRegions"
+ value TRUE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "ImplementationType"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "ConstValue"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDefaultSpecifier"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "DefaultSpecifier"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "IDLElement"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "IDLSpecificationType"
+ value ("IDLSpecSet" 22))
+ (object Attribute
+ tool "IDL"
+ name "IDLSpecSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Interface"
+ value 22)
+ (object Attribute
+ tool "IDL"
+ name "Typedef"
+ value 54)
+ (object Attribute
+ tool "IDL"
+ name "Enumeration"
+ value 8)
+ (object Attribute
+ tool "IDL"
+ name "Const"
+ value 71)
+ (object Attribute
+ tool "IDL"
+ name "Exception"
+ value 61)
+ (object Attribute
+ tool "IDL"
+ name "Struct"
+ value 51)
+ (object Attribute
+ tool "IDL"
+ name "Union"
+ value 81)))))
+ (object Attribute
+ tool "IDL"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "IDL"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "GenerateIDLModule"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "InclusionProtectionSymbol"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "IncludeBySimpleName"
+ value FALSE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Module-Body"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "IDL"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "IncludeBySimpleName"
+ value FALSE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "OperationIsOneWay"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "Context"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "Raises"
+ value "")))
+ (object Attribute
+ tool "IDL"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "CaseSpecifier"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "IDL"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "IsConst"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "ConstValue"
+ value "")))
+ (object Attribute
+ tool "IDL"
+ name "default__Has"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "NameIfUnlabeled"
+ value "the_$supplier")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "IDL"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "BoundedHasRelType"
+ value ("HasRelTypeSet" 47))
+ (object Attribute
+ tool "IDL"
+ name "HasRelTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "IDL"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "IDL"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "NameIfUnlabeled"
+ value "the_$supplier")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "IDL"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "BoundedRoleType"
+ value ("AssocTypeSet" 47))
+ (object Attribute
+ tool "IDL"
+ name "AssocTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "IDL"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "IDL"
+ name "default__Uses"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "GenerateForwardReference"
+ value FALSE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Subsystem"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Directory"
+ value "AUTO GENERATE")))
+ (object Attribute
+ tool "IDL"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "Java"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "CreateMissingDirectories"
+ value TRUE)
+ (object Attribute
+ tool "Java"
+ name "StopOnError"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Directory"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "Java"
+ name "UsePrefixes"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "InstanceVariablePrefix"
+ value "m_")
+ (object Attribute
+ tool "Java"
+ name "ClassVariablePrefix"
+ value "s_")
+ (object Attribute
+ tool "Java"
+ name "DefaultAttributeDataType"
+ value "int")
+ (object Attribute
+ tool "Java"
+ name "DefaultOperationReturnType"
+ value "void")))
+ (object Attribute
+ tool "Java"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "Final"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "GenerateDefaultConstructor"
+ value TRUE)
+ (object Attribute
+ tool "Java"
+ name "ConstructorIs"
+ value ("Ctor_Set" 62))
+ (object Attribute
+ tool "Java"
+ name "Ctor_Set"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "Public"
+ value 62)
+ (object Attribute
+ tool "Java"
+ name "Protected"
+ value 63)
+ (object Attribute
+ tool "Java"
+ name "Private"
+ value 64)))
+ (object Attribute
+ tool "Java"
+ name "GenerateFinalizer"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "GenerateStaticInitializer"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "GenerateInstanceInitializer"
+ value FALSE)))
+ (object Attribute
+ tool "Java"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "Java"
+ name "CmIdentification"
+ value (value Text ""))
+ (object Attribute
+ tool "Java"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "Java"
+ name "AdditionalImports"
+ value (value Text ""))))
+ (object Attribute
+ tool "Java"
+ name "default__Module-Body"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "Java"
+ name "CmIdentification"
+ value (value Text ""))
+ (object Attribute
+ tool "Java"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "Java"
+ name "AdditionalImports"
+ value (value Text ""))))
+ (object Attribute
+ tool "Java"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "Abstract"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Static"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Final"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Native"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Synchronized"
+ value FALSE)))
+ (object Attribute
+ tool "Java"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "Java"
+ name "Final"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Transient"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Volatile"
+ value FALSE)))
+ (object Attribute
+ tool "Java"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Java"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "Java"
+ name "ContainerClass"
+ value "")
+ (object Attribute
+ tool "Java"
+ name "InitialValue"
+ value "")
+ (object Attribute
+ tool "Java"
+ name "Final"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Transient"
+ value FALSE)
+ (object Attribute
+ tool "Java"
+ name "Volatile"
+ value FALSE)))
+ (object Attribute
+ tool "Java"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "propertyId"
+ value "360000002")
+ (object Attribute
+ tool "Oracle8"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "DDLScriptFilename"
+ value "DDL1.SQL")
+ (object Attribute
+ tool "Oracle8"
+ name "DropClause"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "PrimaryKeyColumnName"
+ value "_ID")
+ (object Attribute
+ tool "Oracle8"
+ name "PrimaryKeyColumnType"
+ value "NUMBER(5,0)")
+ (object Attribute
+ tool "Oracle8"
+ name "SchemaNamePrefix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "SchemaNameSuffix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "TableNamePrefix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "TableNameSuffix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "TypeNamePrefix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "TypeNameSuffix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "ViewNamePrefix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "ViewNameSuffix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "VarrayNamePrefix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "VarrayNameSuffix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "NestedTableNamePrefix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "NestedTableNameSuffix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "ObjectTableNamePrefix"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "ObjectTableNameSuffix"
+ value "")))
+ (object Attribute
+ tool "Oracle8"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "IsSchema"
+ value FALSE)))
+ (object Attribute
+ tool "Oracle8"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "OID"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "WhereClause"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "CheckConstraint"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "CollectionTypeLength"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "CollectionTypePrecision"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "CollectionTypeScale"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "CollectionOfREFS"
+ value FALSE)))
+ (object Attribute
+ tool "Oracle8"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "MethodKind"
+ value ("MethodKindSet" 1903))
+ (object Attribute
+ tool "Oracle8"
+ name "OverloadID"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "OrderNumber"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "IsReadNoDataState"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "IsReadNoProcessState"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "IsWriteNoDataState"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "IsWriteNoProcessState"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "IsSelfish"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerType"
+ value ("TriggerTypeSet" 1801))
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerEvent"
+ value ("TriggerEventSet" 1601))
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerText"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerReferencingNames"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerForEach"
+ value ("TriggerForEachSet" 1701))
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerWhenClause"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "MethodKindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "MapMethod"
+ value 1901)
+ (object Attribute
+ tool "Oracle8"
+ name "OrderMethod"
+ value 1902)
+ (object Attribute
+ tool "Oracle8"
+ name "Function"
+ value 1903)
+ (object Attribute
+ tool "Oracle8"
+ name "Procedure"
+ value 1904)
+ (object Attribute
+ tool "Oracle8"
+ name "Operator"
+ value 1905)
+ (object Attribute
+ tool "Oracle8"
+ name "Constructor"
+ value 1906)
+ (object Attribute
+ tool "Oracle8"
+ name "Destructor"
+ value 1907)
+ (object Attribute
+ tool "Oracle8"
+ name "Trigger"
+ value 1908)
+ (object Attribute
+ tool "Oracle8"
+ name "Calculated"
+ value 1909)))
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "AFTER"
+ value 1801)
+ (object Attribute
+ tool "Oracle8"
+ name "BEFORE"
+ value 1802)
+ (object Attribute
+ tool "Oracle8"
+ name "INSTEAD OF"
+ value 1803)))
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerForEachSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "ROW"
+ value 1701)
+ (object Attribute
+ tool "Oracle8"
+ name "STATEMENT"
+ value 1702)))
+ (object Attribute
+ tool "Oracle8"
+ name "TriggerEventSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "INSERT"
+ value 1601)
+ (object Attribute
+ tool "Oracle8"
+ name "UPDATE"
+ value 1602)
+ (object Attribute
+ tool "Oracle8"
+ name "DELETE"
+ value 1603)
+ (object Attribute
+ tool "Oracle8"
+ name "INSERT OR UPDATE"
+ value 1604)
+ (object Attribute
+ tool "Oracle8"
+ name "INSERT OR DELETE"
+ value 1605)
+ (object Attribute
+ tool "Oracle8"
+ name "UPDATE OR DELETE"
+ value 1606)
+ (object Attribute
+ tool "Oracle8"
+ name "INSERT OR UPDATE OR DELETE"
+ value 1607)))))
+ (object Attribute
+ tool "Oracle8"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "OrderNumber"
+ value "")))
+ (object Attribute
+ tool "Oracle8"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Oracle8"
+ name "OrderNumber"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "IsUnique"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "NullsAllowed"
+ value TRUE)
+ (object Attribute
+ tool "Oracle8"
+ name "Length"
+ value "")
+ (object Attribute
+ tool "Oracle8"
+ name "Precision"
+ value "2")
+ (object Attribute
+ tool "Oracle8"
+ name "Scale"
+ value "6")
+ (object Attribute
+ tool "Oracle8"
+ name "IsIndex"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "IsPrimaryKey"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "CompositeUnique"
+ value FALSE)
+ (object Attribute
+ tool "Oracle8"
+ name "CheckConstraint"
+ value "")))
+ (object Attribute
+ tool "Oracle8"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "Repository"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "cg"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "UseMSVC"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "HeaderFileExtension"
+ value "h")
+ (object Attribute
+ tool "cg"
+ name "HeaderFileBackupExtension"
+ value "h~")
+ (object Attribute
+ tool "cg"
+ name "HeaderFileTemporaryExtension"
+ value "h#")
+ (object Attribute
+ tool "cg"
+ name "CodeFileExtension"
+ value "cpp")
+ (object Attribute
+ tool "cg"
+ name "CodeFileBackupExtension"
+ value "cp~")
+ (object Attribute
+ tool "cg"
+ name "CodeFileTemporaryExtension"
+ value "cp#")
+ (object Attribute
+ tool "cg"
+ name "CreateMissingDirectories"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "StopOnError"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ErrorLimit"
+ value 30)
+ (object Attribute
+ tool "cg"
+ name "Directory"
+ value "$ROSECPP_SOURCE")
+ (object Attribute
+ tool "cg"
+ name "PathSeparator"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "FileNameFormat"
+ value "128vx_b")
+ (object Attribute
+ tool "cg"
+ name "BooleanType"
+ value "int")
+ (object Attribute
+ tool "cg"
+ name "AllowTemplates"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AllowExplicitInstantiations"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AllowProtectedInheritance"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "CommentWidth"
+ value 60)
+ (object Attribute
+ tool "cg"
+ name "OneByValueContainer"
+ value "$targetClass")
+ (object Attribute
+ tool "cg"
+ name "OneByReferenceContainer"
+ value "$targetClass *")
+ (object Attribute
+ tool "cg"
+ name "OptionalByValueContainer"
+ value "OptionalByValue<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "OptionalByReferenceContainer"
+ value "$targetClass *")
+ (object Attribute
+ tool "cg"
+ name "FixedByValueContainer"
+ value "$targetClass[$limit]")
+ (object Attribute
+ tool "cg"
+ name "UnorderedFixedByValueContainer"
+ value "$targetClass[$limit]")
+ (object Attribute
+ tool "cg"
+ name "FixedByReferenceContainer"
+ value "$targetClass *[$limit]")
+ (object Attribute
+ tool "cg"
+ name "UnorderedFixedByReferenceContainer"
+ value "$targetClass *[$limit]")
+ (object Attribute
+ tool "cg"
+ name "BoundedByValueContainer"
+ value "BoundedListByValue<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedBoundedByValueContainer"
+ value "BoundedSetByValue<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "BoundedByReferenceContainer"
+ value "BoundedListByReference<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedBoundedByReferenceContainer"
+ value "BoundedSetByReference<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "UnboundedByValueContainer"
+ value "UnboundedListByValue<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedUnboundedByValueContainer"
+ value "UnboundedSetByValue<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "UnboundedByReferenceContainer"
+ value "UnboundedListByReference<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedUnboundedByReferenceContainer"
+ value "UnboundedSetByReference<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "QualifiedByValueContainer"
+ value "AssociationByValue<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedQualifiedByValueContainer"
+ value "DictionaryByValue<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "QualifiedByReferenceContainer"
+ value "AssociationByReference<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedQualifiedByReferenceContainer"
+ value "DictionaryByReference<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "GeneratePreserveRegions"
+ value TRUE)))
+ (object Attribute
+ tool "cg"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ImplementationType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ClassKey"
+ value "class")
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "PutBodiesInSpec"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateDefaultConstructor"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "DefaultConstructorVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineDefaultConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ExplicitDefaultConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateCopyConstructor"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "CopyConstructorVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineCopyConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ExplicitCopyConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateDestructor"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DestructorVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "DestructorKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineDestructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateAssignmentOperation"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "AssignmentVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "AssignmentKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineAssignmentOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateEqualityOperations"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "EqualityVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "EqualityKind"
+ value ("FriendKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineEqualityOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateRelationalOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "RelationalVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "RelationalKind"
+ value ("FriendKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineRelationalOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateStorageMgmtOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "StorageMgmtVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineStorageMgmtOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSubscriptOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "SubscriptVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "SubscriptKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "SubscriptResultType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InlineSubscriptOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateDereferenceOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DereferenceVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "DereferenceKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "DereferenceResultType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InlineDereferenceOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateIndirectionOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IndirectionVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "IndirectionKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "IndirectionResultType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InlineIndirectionOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateStreamOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "StreamVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineStreamOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ThreeKindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)))
+ (object Attribute
+ tool "cg"
+ name "KindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)))
+ (object Attribute
+ tool "cg"
+ name "FriendKindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "GenerateSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "DeclareAndDefine"
+ value 199)
+ (object Attribute
+ tool "cg"
+ name "DeclareOnly"
+ value 205)
+ (object Attribute
+ tool "cg"
+ name "DoNotDeclare"
+ value 206)))
+ (object Attribute
+ tool "cg"
+ name "VisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)))
+ (object Attribute
+ tool "cg"
+ name "ConstValue"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateDefaultSpecifier"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DefaultSpecifier"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "cg"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "AllowExtensionlessFileName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InclusionProtectionSymbol"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "IncludeFormat"
+ value (value Text
+|// $package
+|#include "$file"
+|
+ ))
+ (object Attribute
+ tool "cg"
+ name "IncludeBySimpleName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludePrecompiledHeader"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludeOrder"
+ value "AMIR")
+ (object Attribute
+ tool "cg"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "InliningStyle"
+ value ("InliningStyleSet" 207))
+ (object Attribute
+ tool "cg"
+ name "InliningStyleSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "InClassDeclaration"
+ value 208)
+ (object Attribute
+ tool "cg"
+ name "FollowingClassDeclaration"
+ value 207)))
+ (object Attribute
+ tool "cg"
+ name "TypesDefined"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "IncludeClosure"
+ value (value Text ""))))
+ (object Attribute
+ tool "cg"
+ name "default__Module-Body"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "cg"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "AllowExtensionlessFileName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludeFormat"
+ value (value Text
+|// $package
+|#include "$file"
+|
+ ))
+ (object Attribute
+ tool "cg"
+ name "IncludeBySimpleName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludePrecompiledHeader"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "IncludeOrder"
+ value "AMIR")
+ (object Attribute
+ tool "cg"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "InliningStyle"
+ value ("InliningStyleSet" 207))
+ (object Attribute
+ tool "cg"
+ name "InliningStyleSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "InClassDeclaration"
+ value 208)
+ (object Attribute
+ tool "cg"
+ name "FollowingClassDeclaration"
+ value 207)))
+ (object Attribute
+ tool "cg"
+ name "TypesDefined"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "IncludeClosure"
+ value (value Text ""))))
+ (object Attribute
+ tool "cg"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "OperationKind"
+ value ("OperationKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "OperationKindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "OperationIsConst"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "OperationIsExplicit"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "Inline"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "EntryCode"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "ExitCode"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "BodyAnnotations"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "OperationIsOneWay"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "Context"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "Raises"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Has"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "Ordered"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "NameIfUnlabeled"
+ value "the_$supplier")
+ (object Attribute
+ tool "cg"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtRelationshipVisibility"
+ value 210)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberFieldSize"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InitialValue"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "GenerateGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetName"
+ value "get_$relationship")
+ (object Attribute
+ tool "cg"
+ name "SetName"
+ value "set_$relationship")
+ (object Attribute
+ tool "cg"
+ name "GetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GetSetKindsSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "ContainerClass"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "SelectorName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "SelectorType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConstSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_Function"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "GetSetByReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "SetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "ForwardReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "BoundedHasRelType"
+ value ("HasRelTypeSet" 47))
+ (object Attribute
+ tool "cg"
+ name "HasRelTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "cg"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "cg"
+ name "default__Association"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "NameIfUnlabeled"
+ value "the_$targetClass")))
+ (object Attribute
+ tool "cg"
+ name "default__Inherit"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "InstanceArguments"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ForwardReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "NameIfUnlabeled"
+ value "the_$targetClass")
+ (object Attribute
+ tool "cg"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberName"
+ value "$target")
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtRelationshipVisibility"
+ value 210)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberFieldSize"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InitialValue"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "ContainerClass"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ContainerGet"
+ value "$data.get($keys)")
+ (object Attribute
+ tool "cg"
+ name "ContainerSet"
+ value "$data.set($keys,$value)")
+ (object Attribute
+ tool "cg"
+ name "QualifiedContainer"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "AssocClassContainer"
+ value "$supplier *")
+ (object Attribute
+ tool "cg"
+ name "AssocClassInitialValue"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "GetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GetSetKindsSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "GetSetByReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetName"
+ value "get_$target")
+ (object Attribute
+ tool "cg"
+ name "GetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConstSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_Function"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "InlineGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "SetName"
+ value "set_$target")
+ (object Attribute
+ tool "cg"
+ name "SetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetSetByReference"
+ value ("QualifiedGetSetByReferenceSet" 2))
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetSetByReferenceSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_GetSetByReference"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "GenerateQualifiedGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetName"
+ value "get_$target")
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "InlineQualifiedGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateQualifiedSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedSetName"
+ value "set_$target")
+ (object Attribute
+ tool "cg"
+ name "QualifiedSetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineQualifiedSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateAssocClassDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberName"
+ value "$target")
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtRelationshipVisibility"
+ value 210)))
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GenerateAssocClassGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetName"
+ value "get_$target")
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "InlineAssocClassGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateAssocClassSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassSetName"
+ value "set_$target")
+ (object Attribute
+ tool "cg"
+ name "AssocClassSetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineAssocClassSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassForwardReferenceOnly"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "BoundedRoleType"
+ value ("AssocTypeSet" 47))
+ (object Attribute
+ tool "cg"
+ name "AssocTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "cg"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "cg"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberName"
+ value "$attribute")
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtAttributeVisibility"
+ value 211)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberFieldSize"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetName"
+ value "get_$attribute")
+ (object Attribute
+ tool "cg"
+ name "SetName"
+ value "set_$attribute")
+ (object Attribute
+ tool "cg"
+ name "GetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GetSetKindsSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "GetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConstSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_Function"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "GetSetByReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "SetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "CaseSpecifier"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "IsReadOnly"
+ value FALSE)))
+ (object Attribute
+ tool "cg"
+ name "default__Uses"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "ForwardReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "BodyReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateForwardReference"
+ value FALSE)))
+ (object Attribute
+ tool "cg"
+ name "default__Subsystem"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Directory"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "DirectoryIsOnSearchList"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "PrecompiledHeader"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Category"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "IsNamespace"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "Indent"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))))
+ (object Attribute
+ tool "MSVC"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "MSVC"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Version"
+ value "5.0")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCClassTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCClassTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Interface_Part"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Connection_Part"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Class_Factory"
+ value 3)))
+ (object Attribute
+ tool "MSVC"
+ name "CObjectFunctionality"
+ value ("CObjectFunctionalitySet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "CObjectFunctionalitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Dynamic"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Dyncreate"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Serial"
+ value 3)))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateOverrideGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "GenerateDataGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DATA_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateFieldGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_FIELD_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateMessageGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "GenerateMessageMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_MSG_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MESSAGE_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "OLEFactory"
+ value ("OLEFactorySet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "OLEFactorySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Built_in"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Simple"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Licensed"
+ value 3)))
+ (object Attribute
+ tool "MSVC"
+ name "OLEName"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLEClassID"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateOLECtlType"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "OLECtlType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateOLETypeLib"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "OLETypeLibID"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLETypeLibMajor"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLETypeLibMinor"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GeneratePropPageIDs"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "OLEPropPageIDs"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateDispatchMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "StockProperties"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "StockFunctions"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DispatchDefValue"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateDispIdEnum"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISP_ID_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateInterfaceMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "INTERFACE_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "InitInterface"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateEventMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENT_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "StockEvents"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateEventSinkMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENTSINK_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "PropNotifySinks"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateConnectionMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "CONNECTION_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "ConnectionPointIID"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "InheritanceType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLECommands"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MFCDeclares"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MFCImplements"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "ATL_Declares"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateCOMMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "COM_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateConnectionPointMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "CONNECTION_POINT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateMsgMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "MSG_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GeneratePropertyMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "PROPERTY_MAP_Entries"
+ value (value Text ""))))
+ (object Attribute
+ tool "MSVC"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCOperationTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCOperationTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Virtual_Override"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Message_Handler"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dispatch_Handler"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Event_Firing_Function"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Event_Sink_Handler"
+ value 5)
+ (object Attribute
+ tool "MSVC"
+ name "Std_OLE_Method"
+ value 6)
+ (object Attribute
+ tool "MSVC"
+ name "Command_Parser"
+ value 7)
+ (object Attribute
+ tool "MSVC"
+ name "Property_Get_Function"
+ value 8)
+ (object Attribute
+ tool "MSVC"
+ name "Property_Set_Function"
+ value 9)
+ (object Attribute
+ tool "MSVC"
+ name "Property_Notify_Function"
+ value 10)
+ (object Attribute
+ tool "MSVC"
+ name "Macro_Generated_Function"
+ value 11)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_MSG_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MESSAGE_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "BodyImage"
+ value (value Text ""))))
+ (object Attribute
+ tool "MSVC"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCAttributeTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCAttributeTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Member_Property"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Get_Set_Property"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dialog_Data"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Field_Data"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Stock_Property"
+ value 5)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "PointerBase"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "StockPropertyImplementation"
+ value "")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Has"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCAttributeTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCAttributeTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Member_Property"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Get_Set_Property"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dialog_Data"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Field_Data"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Stock_Property"
+ value 5)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "PointerBase"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "StockPropertyImplementation"
+ value "")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCAttributeTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCAttributeTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Member_Property"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Get_Set_Property"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dialog_Data"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Field_Data"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Stock_Property"
+ value 5)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "PointerBase"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "StockPropertyImplementation"
+ value "")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "GenerateIncludesGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_INCLUDES_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateInsertLocation"
+ value FALSE)))
+ (object Attribute
+ tool "MSVC"
+ name "default__Module-Body"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "GenerateIncludesGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_INCLUDES_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateInsertLocation"
+ value FALSE)))
+ (object Attribute
+ tool "cg"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "SCC"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "TypeLibImporter"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "propertyId"
+ value "783606378")
+ (object Attribute
+ tool "Visual Basic"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "CreatableSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "Private"
+ value 221)
+ (object Attribute
+ tool "Visual Basic"
+ name "PublicNotCreatable"
+ value 213)
+ (object Attribute
+ tool "Visual Basic"
+ name "SingleUse"
+ value 214)
+ (object Attribute
+ tool "Visual Basic"
+ name "GlobalSingleUse"
+ value 215)
+ (object Attribute
+ tool "Visual Basic"
+ name "MultiUse"
+ value 219)
+ (object Attribute
+ tool "Visual Basic"
+ name "GlobalMultiUse"
+ value 220)))
+ (object Attribute
+ tool "Visual Basic"
+ name "OptionBase"
+ value "0")
+ (object Attribute
+ tool "Visual Basic"
+ name "OptionExplicit"
+ value TRUE)
+ (object Attribute
+ tool "Visual Basic"
+ name "OptionCompare"
+ value ("CompareSet" 202))
+ (object Attribute
+ tool "Visual Basic"
+ name "Creatable"
+ value ("CreatableSet" 221))
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateInitialization"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateTermination"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "CollectionClass"
+ value "Collection")
+ (object Attribute
+ tool "Visual Basic"
+ name "CompareSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "None"
+ value 202)
+ (object Attribute
+ tool "Visual Basic"
+ name "Binary"
+ value 203)
+ (object Attribute
+ tool "Visual Basic"
+ name "Text"
+ value 204)))))
+ (object Attribute
+ tool "Visual Basic"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "OperationName"
+ value "$operation")
+ (object Attribute
+ tool "Visual Basic"
+ name "LibraryName"
+ value "")
+ (object Attribute
+ tool "Visual Basic"
+ name "AliasName"
+ value "")
+ (object Attribute
+ tool "Visual Basic"
+ name "IsStatic"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "EntryCode"
+ value (value Text ""))
+ (object Attribute
+ tool "Visual Basic"
+ name "ExitCode"
+ value (value Text ""))))
+ (object Attribute
+ tool "Visual Basic"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "IsConst"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "New"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "WithEvents"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "Subscript"
+ value "")
+ (object Attribute
+ tool "Visual Basic"
+ name "NameIfUnlabeled"
+ value "the$supplier")
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "Visual Basic"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateGetOperation"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateSetOperation"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateLetOperation"
+ value FALSE)))
+ (object Attribute
+ tool "Visual Basic"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "New"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "WithEvents"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "Subscript"
+ value "")
+ (object Attribute
+ tool "Visual Basic"
+ name "NameIfUnlabeled"
+ value "the$supplier")
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "Visual Basic"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateGetOperation"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateSetOperation"
+ value FALSE)
+ (object Attribute
+ tool "Visual Basic"
+ name "GenerateLetOperation"
+ value FALSE)))
+ (object Attribute
+ tool "Visual Basic"
+ name "default__Inherit"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "ImplementsDelegation"
+ value TRUE)))
+ (object Attribute
+ tool "Visual Basic"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "Visual Basic"
+ name "ProjectFile"
+ value "")))
+ (object Attribute
+ tool "Visual Basic"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "VisualStudio"
+ name "HiddenTool"
+ value FALSE))
+ quid "4362A29901BD"))
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java
new file mode 100644
index 0000000000..8099ddd38b
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java
@@ -0,0 +1,150 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CompanyDeptData;
+import org.apache.tuscany.das.rdb.test.data.DepEmpData;
+import org.apache.tuscany.das.rdb.test.data.DepartmentData;
+import org.apache.tuscany.das.rdb.test.data.EmployeeData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class BestPracticeTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+ new DepEmpData(getAutoConnection()).refresh();
+
+ }
+
+ //Read list of companies
+ public void testReadCompanies() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CompanyConfig.xml"));
+ Command read = commandGroup.getCommand("all companies");
+ DataObject root = read.executeQuery();
+ assertEquals(3, root.getList("COMPANY").size());
+
+ }
+
+ //Read list of companies
+ public void testReadCompaniesWithDepartments() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CompanyConfig.xml"));
+ Command read = commandGroup.getCommand("all companies and departments");
+ DataObject root = read.executeQuery();
+ DataObject firstCompany = root.getDataObject("COMPANY[1]");
+ List departments = firstCompany.getList("departments");
+ assertEquals(0, departments.size());
+
+ }
+
+ public void testddDepartmentToFirstCompany() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CompanyConfig.xml"));
+ Command read = commandGroup.getCommand("all companies and departments");
+ DataObject root = read.executeQuery();
+ DataObject firstCustomer = root.getDataObject("COMPANY[1]");
+ int deptCount = firstCustomer.getList("departments").size();
+
+ DataObject newDepartment = root.createDataObject("DEPARTMENT");
+ firstCustomer.getList("departments").add(newDepartment);
+
+ ApplyChangesCommand apply = commandGroup.getApplyChangesCommand();
+ apply.execute(root);
+
+ //verify
+ root = read.executeQuery();
+ firstCustomer = root.getDataObject("COMPANY[1]");
+ assertEquals (deptCount + 1, firstCustomer.getList("departments").size());
+ }
+
+ /**
+ * Test ability to correctly flush heirarchy of objects that have generated
+ * keys
+ */
+ public void testFlushCreateHeirarchy() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CompanyConfig.xml"));
+ Command select = commandGroup.getCommand("all companies and departments");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create a new Department
+ //Do not set ID or CompanyID since these are generated
+ DataObject department = root.createDataObject("DEPARTMENT");
+ department.setString("NAME", "Do-rite Pest Control");
+ department.setString("LOCATION", "The boonies");
+ department.setString("NUMBER", "101");
+
+ // Associate the new department with the new company
+ company.getList("departments").add(department);
+
+ // Get apply command
+ ApplyChangesCommand apply = commandGroup.getApplyChangesCommand();
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+
+ select = commandGroup.getCommand("company by id with departments");
+ select.setParameterValue("ID", id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]")
+ .getString("NAME"));
+
+ }
+
+ /**
+ * Test ability to get an empty graph with the Types/Properties intact
+ */
+ public void testGetEmptyGraph() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CompanyConfig.xml"));
+
+ Command select = commandGroup.getCommand("company by id with departments");
+ Integer idOfNoExistingCompany = new Integer(-1);
+ select.setParameterValue("ID", idOfNoExistingCompany);
+ DataObject root = select.executeQuery();
+
+ //Will fail if there is no property named "COMPANY"
+ assertEquals(0, root.getList("COMPANY").size());
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java
new file mode 100644
index 0000000000..35def7e677
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java
@@ -0,0 +1,124 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class CUDGeneration extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ /**
+ * This tests provides invalid SQL and should fail on Apply.execute. If not
+ * then the engine is generating CUD and overlooking the provided
+ * statements.
+ */
+ public void testCUDGeneration1() throws Exception {
+
+ // Read customer with particular ID
+ Command select = Command.FACTORY
+ .createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY
+ .createApplyChangesCommand(getConfig("basicCustomerMappingWithInvalidCUD.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ try {
+ apply.execute(root);
+ fail("Should fail with invalid SQL. Provided CUD not used!!");
+ } catch (RuntimeException e) {
+ // Everything OK
+ }
+
+ }
+
+ public void testInsertCUDGeneration() throws Exception {
+ Command select = Command.FACTORY
+ .createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject customer = root.createDataObject("CUSTOMER");
+ customer.setInt("ID", 720);
+ customer.set("LASTNAME", "foobar");
+ customer.set("ADDRESS", "asdfasdf");
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+ apply.execute(root);
+
+ select = Command.FACTORY
+ .createCommand("select * from CUSTOMER where ID = 720");
+ select.setConnection(getConnection());
+ root = select.executeQuery();
+
+ assertEquals(1, root.getList("CUSTOMER").size());
+ }
+
+ public void testReadModifyApply() throws Exception {
+
+ // Build the select command to read a specific customer and related
+ // orders
+ Command select = Command.FACTORY
+ .createCommand(
+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID",
+ getConfig("1xM_mapping_no_cud.xml"));
+
+ // Parameterize the command
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", new Integer(1));
+
+ // Get the graph
+ DataObject root = select.executeQuery();
+
+ // Modify a customer
+ DataObject customer = (DataObject) root.get("Customer[1]");
+ customer.set("LASTNAME", "Pavick");
+
+ // Modify an order
+ DataObject order = (DataObject) customer.get("orders[1]");
+ order.setString("PRODUCT", "Kitchen Sink 001");
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("1xM_mapping_no_cud.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute(root);
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java
new file mode 100644
index 0000000000..dcadd27d2f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java
@@ -0,0 +1,165 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * This test
+ *
+ */
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+/**
+ *
+ * This tests use of the XML Config file. Tests will utilize the
+ * customer-orders-orderdetails tables. The plan is for the config file to have
+ * a section that applies to all commands and another that applies to specific
+ * commands.
+ *
+ * The config file will be used to initialize a command factory that will then
+ * return named commands.
+ *
+ * There will be two read commands:
+ *
+ * 1) Return all customers 2) Return a specific customer (by ID) and related
+ * orders and order details
+ *
+ * A test will demonstrate the creation of the factory and then reuse of
+ * commands created from the same config data file
+ *
+ */
+public class CommandGroupTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read
+ */
+ public void testRead() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CustomersOrdersConfig.xml"));
+ commandGroup.setConnection(getConnection());
+
+ Command read = commandGroup.getCommand("all customers");
+ DataObject root = read.executeQuery();
+
+ assertEquals(5, root.getList("CUSTOMER").size());
+
+ }
+
+ /**
+ * Read an order using parm marker
+ */
+ public void testReadWithParmmarker() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CustOrdersConnectionProps.xml"));
+
+ Command read = commandGroup.getCommand("order by id with ?");
+ read.setParameterValue(1, new Integer(1));
+ DataObject root = read.executeQuery();
+
+ assertEquals("recombobulator", root.getString("ANORDER[1]/PRODUCT"));
+
+ }
+
+ /**
+ * Specify connection properties in config
+ */
+ public void testReadWithConnectionProperties() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CustOrdersConnectionProps.xml"));
+
+ Command read = commandGroup.getCommand("all customers");
+ DataObject root = read.executeQuery();
+
+ assertEquals(5, root.getList("CUSTOMER").size());
+
+ }
+
+ /**
+ * Specify connection properties in config. Add explicit update command
+ */
+ public void testUpdate() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CustOrdersConnectionProps.xml"));
+
+ Command read = commandGroup.getCommand("all customers");
+ DataObject root = read.executeQuery();
+ // Verify precondition
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+ int id = root.getInt("CUSTOMER[1]/ID");
+
+ Command update = commandGroup.getCommand("update customer");
+ update.setParameterValue("ID", new Integer(id));
+ update.execute();
+
+ // Verify update - reuse select command
+ root = read.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ /**
+ * Read all customers, select a specific customer. Then read that customer
+ * and related orders. Modify an order and flush changes back
+ */
+ public void testRead2() throws Exception {
+
+ // Create the group and set common connection
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CustomersOrdersConfig.xml"));
+ commandGroup.setConnection(getConnection());
+
+ // Read all customers and remember the first one
+ Command read = commandGroup.getCommand("all customers");
+ DataObject root = read.executeQuery();
+ Integer id = (Integer) root.get("CUSTOMER[1]/ID");
+
+ // Read the specific Customer from above and its related orders
+ Command custOrders = commandGroup.getCommand("customer and orders");
+ custOrders.setParameterValue("ID", id);
+ root = custOrders.executeQuery();
+
+ // Modify the first order and flush this change back to the database
+ root.setString("CUSTOMER[1]/orders[1]/PRODUCT", "Defibrillator");
+ Integer orderId = (Integer) root.get("CUSTOMER[1]/orders[1]/ID");
+ ApplyChangesCommand flush = commandGroup.getApplyChangesCommand();
+ flush.execute(root);
+
+ // Verify
+ Command orderByID = commandGroup.getCommand("order by id");
+ orderByID.setParameterValue("ID", orderId);
+ assertEquals("Defibrillator", root.getString("ANORDER[1]/PRODUCT"));
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java
new file mode 100644
index 0000000000..011f1791e9
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java
@@ -0,0 +1,105 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.company.CompanyFactory;
+import org.apache.tuscany.das.rdb.test.company.CompanyType;
+import org.apache.tuscany.das.rdb.test.company.DatagraphRoot;
+import org.apache.tuscany.das.rdb.test.company.DepartmentType;
+import org.apache.tuscany.das.rdb.test.company.EmployeeType;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CompanyDeptData;
+import org.apache.tuscany.das.rdb.test.data.DepEmpData;
+import org.apache.tuscany.das.rdb.test.data.DepartmentData;
+import org.apache.tuscany.das.rdb.test.data.EmployeeData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.TypeHelper;
+
+public class CompanyTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+ new DepEmpData(getAutoConnection()).refresh();
+
+ }
+
+ public void testSimple() throws Exception {
+
+ // Build the select command
+ Command selectCommand = Command.FACTORY.createCommand("select COMPANY.NAME, "
+ + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, "
+ + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.NUMBER from COMPANY, DEPARTMENT, EMPLOYEE "
+ + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID", getConfig("companyMapping.xml"));
+
+ // Parameterize the command
+ selectCommand.setConnection(getConnection());
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ // Get a company
+ DataObject company = (DataObject) root.getList("CompanyType").get(0);
+ assertEquals("MegaCorp", company.get("NAME"));
+
+ // Get a department
+ DataObject department = (DataObject) company.getList("departments").get(0);
+ assertEquals("Advanced Technologies", department.get("NAME"));
+
+ DataObject employee = (DataObject) department.getList("employees").get(0);
+ assertEquals("John Jones", employee.get("NAME"));
+ }
+
+ public void testSimpleStatic() throws Exception {
+
+ SDOUtil.registerStaticTypes(CompanyFactory.class);
+ // Build the select command
+ Command selectCommand = Command.FACTORY.createCommand("select COMPANY.NAME, "
+ + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, "
+ + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.NUMBER from COMPANY, DEPARTMENT, EMPLOYEE "
+ + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID", getConfig("companyMappingWithConverters.xml"));
+
+ // Parameterize the command
+ selectCommand.setConnection(getConnection());
+ selectCommand.setDataObjectModel(TypeHelper.INSTANCE.getType(DatagraphRoot.class));
+
+ // Get the graph
+ DatagraphRoot root = (DatagraphRoot) selectCommand.executeQuery();
+
+
+ CompanyType company = (CompanyType) root.getCompanies().get(0);
+
+ assertEquals("MegaCorp", company.getName());
+
+ // Get a department
+ DepartmentType department = (DepartmentType) company.getDepartments().get(0);
+ assertEquals("Advanced Technologies", department.getName());
+
+ EmployeeType employee = (EmployeeType) department.getEmployees().get(0);
+
+ assertEquals("John Jones", employee.getName());
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
new file mode 100644
index 0000000000..7a3ae9b5ed
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
@@ -0,0 +1,100 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.Key;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Tests for Compound Keys
+ */
+public class CompoundKeyTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new OrderDetailsData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testRead() throws Exception {
+
+ Command getOrderDetails = Command.FACTORY
+ .createCommand("Select * from ORDERDETAILS where ORDERID = :ORDERID AND PRODUCTID = :PRODUCTID");
+ getOrderDetails.setConnection(getConnection());
+
+ getOrderDetails.setParameterValue("ORDERID", new Integer(1));
+ getOrderDetails.setParameterValue("PRODUCTID", new Integer(1));
+
+ DataObject root = getOrderDetails.executeQuery();
+
+ DataObject orderDetail = (DataObject) root.get("ORDERDETAILS[1]");
+ assertEquals(1.1f, orderDetail.getFloat("PRICE"), 0.01);
+
+ }
+
+ public void testReadModifyWrite2() throws Exception {
+
+ Command getOrderDetails = Command.FACTORY
+ .createCommand("Select * from ORDERDETAILS where ORDERID = 1 AND PRODUCTID = 1");
+ getOrderDetails.setConnection(getConnection());
+ DataObject root = getOrderDetails.executeQuery();
+
+ DataObject orderDetails = (DataObject) root.get("ORDERDETAILS[1]");
+ assertEquals(1.1f, orderDetails.getFloat("PRICE"), 0.01);
+
+ // Modify
+ orderDetails.setFloat("PRICE", 0f);
+
+ // Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("OrdersOrderDetailsConfig.xml"));
+ apply.setConnection(getConnection());
+
+ // Write
+ apply.execute(root);
+
+ // Verify
+ root = getOrderDetails.executeQuery();
+ orderDetails = root.getDataObject("ORDERDETAILS[1]");
+ assertEquals(0f, orderDetails.getFloat("PRICE"), 0.01);
+
+ }
+
+ public void testReadOrdersAndDetails2() throws Exception {
+
+ Command read = Command.FACTORY
+ .createCommand("SELECT * FROM ANORDER LEFT JOIN ORDERDETAILS ON ANORDER.ID = ORDERDETAILS.ORDERID ORDER BY ANORDER.ID", getConfig("OrdersOrderDetailsConfig.xml"));
+ read.setConnection(getConnection());
+
+ DataObject root = read.executeQuery();
+
+ DataObject firstOrder = root.getDataObject("ANORDER[1]");
+ assertEquals(1, firstOrder.getInt("ID"));
+ assertEquals(2, firstOrder.getList("ORDERDETAILS").size());
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java
new file mode 100644
index 0000000000..d0f94018cd
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.ResultSetShape;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+/**
+ * Tests the Converter framwork
+ */
+public class ConverterTests extends DasTest {
+
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd");
+
+ private static Date kbday;
+ private static Date tbday;
+
+ static {
+ try {
+ kbday = myformat.parse("1957.09.27");
+ tbday = myformat.parse("1966.12.20");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+
+ /**
+ * This tests the use of an arbitrary converter. The column converted is a VARCAHAR.
+ * ResultSetShape is used to specify that the property will be a SDODataTypes.DATE.
+ *
+ * So this example uses a converter that transforms a string column into a date property
+ * and conversely, a date property back to a string for the underlying column.
+ *
+ * The converter returns 1957.09.27 if the column value is "Williams" and 1966.12.20
+ * if the value is "Pavick"
+ *
+ * On write, the converter returns "Pavick" if the property value is 1966.12.20
+ * and "Williams" if the property value is 1957.09.27
+ *
+ */
+ public void testArbitraryConverter() throws Exception {
+
+ //Create and initialize command to read customers
+ Command read = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1", getConfig("CustomerConfigWithConverter.xml"));
+ read.setConnection(getConnection());
+
+ String[] columns = { "ID", "LASTNAME", "ADDRESS" };
+ String[] tables = { "CUSTOMER", "CUSTOMER", "CUSTOMER" };
+ Type[] types = { SDODataTypes.INTEGEROBJECT, SDODataTypes.DATE, SDODataTypes.STRING };
+ ResultSetShape shape = new ResultSetShape(tables, columns, types);
+ read.setResultSetShape(shape);
+
+ //Read
+ DataObject root = read.executeQuery();
+
+ //Verify
+ assertEquals(kbday, root.getDate("CUSTOMER[1]/LASTNAME"));
+
+ //Modify
+ root.setDate("CUSTOMER[1]/LASTNAME", tbday);
+
+ ApplyChangesCommand write = Command.FACTORY.createApplyChangesCommand(getConfig("CustomerConfigWithConverter.xml"));
+ write.setConnection(getConnection());
+ write.execute(root);
+
+ //Read
+ root = read.executeQuery();
+
+ //Verify
+ assertEquals(tbday, root.getDate("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java
new file mode 100644
index 0000000000..c7aa9cbb6d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java
@@ -0,0 +1,244 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * These tests attempt to duplicate customer reported errors and then to verify
+ * any necessary fix.
+ *
+ */
+
+import java.util.Iterator;
+import java.util.Random;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CompanyDeptData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.DepartmentData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class CorrectedDefectTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Dilton's bug for adding new child data object
+ */
+ public void testAddNewOrder() throws Exception {
+
+ // Read some customers and related orders
+ Command select = Command.FACTORY.createCommand(
+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID",
+ getConfig("CustomersOrdersConfig.xml"));
+ select.setConnection(getConnection());
+
+ DataObject root = select.executeQuery();
+
+ DataObject cust = root.getDataObject("CUSTOMER[1]");
+
+ // Save ID and Order Count
+ int custID = cust.getInt("ID");
+ int custOrderCount = cust.getList("orders").size();
+
+ // Create a new Order and add to customer1
+ DataObject order = root.createDataObject("ANORDER");
+
+ order.set("ID", new Integer(99));
+ order.set("PRODUCT", "The 99th product");
+ order.set("QUANTITY", new Integer(99));
+ cust.getList("orders").add(order);
+
+ assertEquals(custOrderCount + 1, cust.getList("orders").size());
+ // Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("CustomersOrdersConfig.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute(root);
+
+ // verify cust1 relationship updates
+ select = Command.FACTORY
+ .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID",getConfig("CustomersOrdersConfig.xml"));
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", new Integer(custID));
+ root = select.executeQuery();
+
+ assertEquals(custOrderCount + 1, root.getList("CUSTOMER[1]/orders").size());
+
+ }
+
+ public void testDiltonsInsertWorkaround() throws Exception {
+
+ // String sql = "insert into conmgt.serverstatus (statusid,
+ // managedserverid, timestamp) values (316405209, 316405209, '2005-11-23
+ // 19:29:52.636')";
+ // String sql = "insert into conmgt.serverstatus (managedserverid,
+ // timestamp) values (316405209, '2005-11-23 19:29:52.636')";
+ String sql = "insert into conmgt.serverstatus (managedserverid, timestamp) values (:serverid, :timestamp)";
+
+ Command insert = Command.FACTORY.createCommand(sql);
+ insert.setParameterValue("serverid", new Integer(316405209));
+ insert.setParameterValue("timestamp", "2005-11-23 19:29:52.636");
+ insert.setConnection(getConnection());
+ insert.execute();
+
+ // Verify
+ Command select = Command.FACTORY.createCommand("Select * from conmgt.serverstatus");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("SERVERSTATUS").size());
+
+ }
+
+ public void testWASDefect330118() throws Exception {
+
+ // Create the group and set common connection
+ CommandGroup commandGroup = CommandGroup.FACTORY
+ .createCommandGroup(getConfig("CustomersOrdersConfig.xml"));
+ commandGroup.setConnection(getConnection());
+
+ // Read all customers and add one
+ Command read = commandGroup.getCommand("all customers");
+ DataObject root = read.executeQuery();
+ int numCustomers = root.getList("CUSTOMER").size();
+
+ DataObject newCust = root.createDataObject("CUSTOMER");
+ newCust.set("ID", new Integer(100));
+ newCust.set("ADDRESS", "5528 Wells Fargo Drive");
+ newCust.set("LASTNAME", "Gerkin");
+
+ // Now delete this new customer
+ newCust.delete();
+
+ ApplyChangesCommand apply = commandGroup.getApplyChangesCommand();
+ apply.execute(root);
+
+ // Verify
+ root = read.executeQuery();
+ assertEquals(numCustomers, root.getList("CUSTOMER").size());
+
+ }
+
+ /**
+ * Should be able to explicitly set a parameter to null. But, should require
+ * that the parameter type is set.
+ */
+ public void testDiltonsNullParameterBug1() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+ insert.setParameterValue("LASTNAME", null);
+ insert.setParameterType("LASTNAME", SDODataTypes.STRING);
+ insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+ insert.execute();
+
+ // Verify
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ /**
+ * Error by not setting a parameter
+ */
+ public void testDiltonsNullParameterBug2() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+ // insert.setParameterValue("LASTNAME", null);
+ insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+
+ try {
+ insert.execute();
+ fail();
+ } catch (RuntimeException e) {
+ // Expected since "LASTNAME" parameter not set
+ }
+ }
+
+ /**
+ * Set parameter to empty string
+ */
+ public void testDiltonsNullParameterBug3() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+ insert.setParameterValue("LASTNAME", "");
+ insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+ insert.execute();
+
+ // Verify
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ public void testUpdateChildThatHasGeneratedKey() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CompanyConfig.xml"));
+
+ // Read a specific company based on the known ID
+ Command readCust = commandGroup.getCommand("all companies and departments");
+ DataObject root = readCust.executeQuery();
+ DataObject lastCustomer = root.getDataObject("COMPANY[3]");
+ Iterator i = lastCustomer.getList("departments").iterator();
+ Random generator = new Random();
+ int random = generator.nextInt(1000) + 1;
+ DataObject department;
+ while (i.hasNext()) {
+ department = (DataObject) i.next();
+ // System.out.println("Modifying department: " +
+ // department.getString("NAME"));
+ department.setString("NAME", "Dept-" + random);
+ random = random + 1;
+ }
+
+ ApplyChangesCommand apply = commandGroup.getApplyChangesCommand();
+ apply.execute(root);
+
+ }
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
new file mode 100644
index 0000000000..7a82558de6
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
@@ -0,0 +1,377 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * This provdes the simplest examples that make use of the change history. The assumptions are:
+ *
+ * Single type
+ * Change history utilized
+ * Dynamic DataObjects
+ *
+ *
+ */
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class CrudWithChangeHistory
+ extends DasTest
+{
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ new CustomerData( getAutoConnection() ).refresh();
+ new OrderDetailsData( getAutoConnection() ).refresh();
+ }
+
+ protected void tearDown()
+ throws Exception
+ {
+ super.tearDown();
+ }
+
+ /**
+ * Read and modify a customer.
+ * Provide needed Create/Update/Delete statements programatically
+ */
+ public void testReadModifyApply()
+ throws Exception
+ {
+
+ //Read customer 1
+ Command select = Command.FACTORY.createCommand( "Select * from CUSTOMER where ID = 1" );
+ select.setConnection( getConnection() );
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get( "CUSTOMER[1]" );
+
+ //Modify customer
+ customer.set( "LASTNAME", "Pavick" );
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection( getConnection() );
+
+ //Manually create and add update command
+ Command update = Command.FACTORY.createCommand( "update CUSTOMER set LASTNAME = :LASTNAME where ID = :ID" );
+ update.addParameter( "LASTNAME", SDODataTypes.STRING );
+ update.addParameter( "ID", SDODataTypes.INTEGER );
+ apply.addUpdateCommand( customer.getType(), update );
+
+ //Flush changes
+ apply.execute( root );
+
+ //Verify changes
+ root = select.executeQuery();
+ assertEquals( "Pavick", root.getString( "CUSTOMER[1]/LASTNAME" ) );
+
+ }
+
+ /**
+ * Read and modify a customer.
+ * Provide needed Create/Update/Delete statements via xml file
+ */
+ public void testReadModifyApply1()
+ throws Exception
+ {
+
+ //Read customer 1
+ Command select = Command.FACTORY.createCommand( "Select * from CUSTOMER where ID = 1" );
+ select.setConnection( getConnection() );
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get( "CUSTOMER[1]" );
+
+ //Modify customer
+ customer.set( "LASTNAME", "Pavick" );
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("basicCustomerMappingWithCUD.xml"));
+ apply.setConnection( getConnection() );
+
+ //Flush changes
+ apply.execute( root );
+
+ //Verify changes
+ root = select.executeQuery();
+ assertEquals( "Pavick", root.getString( "CUSTOMER[1]/LASTNAME" ) );
+
+ }
+
+ /**
+ * Same as previous but:
+ * Utilizes generated CUD statements
+ * Key info provided programatically
+ */
+ public void testReadModifyApply2()
+ throws Exception
+ {
+
+ //Read customer with particular ID
+ Command select = Command.FACTORY.createCommand( "Select * from CUSTOMER where ID = 1" );
+ select.setConnection( getConnection() );
+ DataObject root = select.executeQuery();
+
+ DataObject customer = root.getDataObject( "CUSTOMER[1]" );
+
+ //Modify customer
+ customer.set( "LASTNAME", "Pavick" );
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection( getConnection() );
+
+ //Flush changes
+ apply.execute( root );
+
+ //Verify the change
+ root = select.executeQuery();
+ assertEquals( "Pavick", root.getDataObject( "CUSTOMER[1]" ).getString( "LASTNAME" ) );
+
+ }
+
+ /**
+ * Builds on previous but:
+ * 1. Key info provided via XML file
+ */
+ public void testReadModifyApply3()
+ throws Exception
+ {
+
+ //Read customer with particular ID
+ Command select = Command.FACTORY.createCommand( "Select * from CUSTOMER where ID = 1" );
+ select.setConnection( getConnection() );
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get( "CUSTOMER[1]" );
+
+ //Modify customer
+ customer.set( "LASTNAME", "Pavick" );
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("basicCustomerMapping.xml"));
+ apply.setConnection( getConnection() );
+
+ //Flush changes
+ apply.execute( root );
+
+ //Verify the change
+ root = select.executeQuery();
+ assertEquals( "Pavick", root.getDataObject( "CUSTOMER[1]" ).getString( "LASTNAME" ) );
+
+ }
+
+ /**
+ * Test ability to handle multiple changes to the graph including Creates/Updates/Deletes
+ * Employs generated CUD
+ */
+ public void testReadModifyDeleteInsertApply()
+ throws Exception
+ {
+
+ //Read some customers
+ Command select = Command.FACTORY.createCommand( "Select * from CUSTOMER where LASTNAME = 'Williams'" );
+ select.setConnection( getConnection() );
+ DataObject root = select.executeQuery();
+
+ DataObject cust1 = (DataObject) root.getList( "CUSTOMER" ).get( 0 );
+ DataObject cust2 = (DataObject) root.getList( "CUSTOMER" ).get( 1 );
+ DataObject cust3 = (DataObject) root.getList( "CUSTOMER" ).get( 2 );
+
+ //Modify a customer
+ cust1.set( "LASTNAME", "Pavick" );
+ int cust1ID = cust1.getInt( "ID" );
+
+ //Save IDs before delete
+ int cust2ID = cust2.getInt( "ID" );
+ int cust3ID = cust3.getInt( "ID" );
+ //Delete a couple
+ cust2.delete();
+ cust3.delete();
+
+ //Create a new customer
+ DataObject cust4 = root.createDataObject( "CUSTOMER" );
+ cust4.set( "ID", new Integer( 100 ) );
+ cust4.set( "ADDRESS", "5528 Wells Fargo Drive" );
+ cust4.set( "LASTNAME", "Gerkin" );
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("basicCustomerMapping.xml"));
+ apply.setConnection( getConnection() );
+
+ //Flush changes
+ apply.execute( root );
+
+ //Verify deletes
+ select = Command.FACTORY.createCommand( "Select * from CUSTOMER where ID = :ID" );
+ select.setConnection( getConnection() );
+ select.setParameterValue( "ID", new Integer( cust2ID ) );
+ root = select.executeQuery();
+ assertTrue( root.getList( "CUSTOMER" ).isEmpty() );
+ //reparameterize same command
+ select.setParameterValue( "ID", new Integer( cust3ID ) );
+ root = select.executeQuery();
+ assertTrue( root.getList( "CUSTOMER" ).isEmpty() );
+
+ //verify insert
+ select.setParameterValue( "ID", new Integer( 100 ) );
+ root = select.executeQuery();
+ assertEquals( 1, root.getList( "CUSTOMER" ).size() );
+ assertEquals( "5528 Wells Fargo Drive", root.getString( "CUSTOMER[1]/ADDRESS" ) );
+ assertEquals( "Gerkin", root.getString( "CUSTOMER[1]/LASTNAME" ) );
+
+ //verify update
+ select.setParameterValue( "ID", new Integer( cust1ID ) );
+ root = select.executeQuery();
+ assertEquals( "Pavick", root.getString( "CUSTOMER[1]/LASTNAME" ) );
+
+ }
+
+
+ public void testReadModifyApplyWithAssumedID() throws Exception {
+
+ //Read customer with particular ID
+ Command select = Command.FACTORY
+ .createCommand("Select * from CUSTOMER");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ //Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ DataObject customerForDelete = root.getDataObject("CUSTOMER[2]");
+ String deletedLastName = customerForDelete.getString("LASTNAME");
+ customerForDelete.delete();
+
+ DataObject newCustomer = root.createDataObject("CUSTOMER");
+ newCustomer.set("LASTNAME", "NewCustomer");
+ newCustomer.setInt("ID", 9000);
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+
+ //Flush changes
+ apply.execute(root);
+
+ //Verify the change
+ root = select.executeQuery();
+ assertEquals("Pavick", getCustomerByLastName(root, "Pavick").getString("LASTNAME"));
+ assertEquals("NewCustomer", getCustomerByLastName(root, "NewCustomer").getString("LASTNAME"));
+ assertNull(getCustomerByLastName(root, deletedLastName));
+
+ }
+
+
+ public void testReadModifyApplyWithAssumedIDFailure() throws Exception {
+
+ Command select = Command.FACTORY
+ .createCommand("Select * from ORDERDETAILS");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject od = root.getDataObject("ORDERDETAILS[1]");
+
+ //Modify customer
+ od.setInt("PRODUCTID", 72);
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+
+ //Flush changes -- This should fail because Order Details does not have a column that
+ // we can assume to be an ID
+ try {
+ apply.execute(root);
+ } catch (RuntimeException ex) {
+ assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config"));
+ }
+
+ }
+
+ public void testReadModifyApplyWithAssumedIDFailure2() throws Exception {
+
+ Command select = Command.FACTORY
+ .createCommand("Select * from ORDERDETAILS");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject od = root.getDataObject("ORDERDETAILS[1]");
+ od.delete();
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+
+ //Flush changes -- This should fail because Order Details does not have a column that
+ // we can assume to be an ID
+ try {
+ apply.execute(root);
+ } catch (RuntimeException ex) {
+ assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config"));
+ }
+
+ }
+ public void testReadModifyApplyWithAssumedIDFailure3() throws Exception {
+
+ Command select = Command.FACTORY
+ .createCommand("Select * from ORDERDETAILS");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject od = root.createDataObject("ORDERDETAILS");
+
+ //Modify customer
+ od.setInt("PRODUCTID", 72);
+ od.setInt("ORDERID", 500);
+
+ //Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+
+ //Flush changes -- This should fail because Order Details does not have a column that
+ // we can assume to be an ID
+ try {
+ apply.execute(root);
+ } catch (RuntimeException ex) {
+ assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config"));
+ }
+
+ }
+ private DataObject getCustomerByLastName(DataObject root, String name) {
+ Iterator i = root.getList("CUSTOMER").iterator();
+ while ( i. hasNext()) {
+ DataObject obj = (DataObject)i.next();
+ if (name.equals(obj.getString("LASTNAME")))
+ return obj;
+ }
+ return null;
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java
new file mode 100644
index 0000000000..1a2516aa02
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java
@@ -0,0 +1,303 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * These tests attempt to duplicate customer reported errors and then to verify
+ * any necessary fix.
+ *
+ */
+
+import java.util.Iterator;
+import java.util.Random;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CompanyDeptData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.DepEmpData;
+import org.apache.tuscany.das.rdb.test.data.DepartmentData;
+import org.apache.tuscany.das.rdb.test.data.EmployeeData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class DefectTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+ new DepEmpData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testDiltonsInsert() throws Exception {
+
+ // String sql = "insert into conmgt.serverstatus (statusid,
+ // managedserverid, timestamp) values (316405209, 316405209, '2005-11-23
+ // 19:29:52.636')";
+ String sql = "insert into conmgt.serverstatus (managedserverid, timestamp) values (316405209, '2005-11-23 19:29:52.636')";
+
+ Command insert = Command.FACTORY.createCommand(sql);
+ insert.setConnection(getConnection());
+ insert.execute();
+
+ // Verify
+ Command select = Command.FACTORY
+ .createCommand("Select * from conmgt.serverstatus where statusid = 316405209");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("conmgt.serverstatus").size());
+
+ }
+
+
+
+ public void testDiltonsInsertWorkaround() throws Exception {
+
+ // String sql = "insert into conmgt.serverstatus (statusid,
+ // managedserverid, timestamp) values (316405209, 316405209, '2005-11-23
+ // 19:29:52.636')";
+ // String sql = "insert into conmgt.serverstatus (managedserverid,
+ // timestamp) values (316405209, '2005-11-23 19:29:52.636')";
+ String sql = "insert into conmgt.serverstatus (managedserverid, timestamp) values (:serverid, :timestamp)";
+
+ Command insert = Command.FACTORY.createCommand(sql);
+ insert.setParameterValue("serverid", new Integer(316405209));
+ insert.setParameterValue("timestamp", "2005-11-23 19:29:52.636");
+ insert.setConnection(getConnection());
+ insert.execute();
+
+ // Verify
+ Command select = Command.FACTORY.createCommand("Select * from conmgt.serverstatus");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("SERVERSTATUS").size());
+
+ }
+
+ public void testWASDefect330118() throws Exception {
+
+ // Create the group and set common connection
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CustomersOrdersConfig.xml"));
+ commandGroup.setConnection(getConnection());
+
+ // Read all customers and add one
+ Command read = commandGroup.getCommand("all customers");
+ DataObject root = read.executeQuery();
+ int numCustomers = root.getList("CUSTOMER").size();
+
+ DataObject newCust = root.createDataObject("CUSTOMER");
+ newCust.set("ID", new Integer(100));
+ newCust.set("ADDRESS", "5528 Wells Fargo Drive");
+ newCust.set("LASTNAME", "Gerkin");
+
+ // Now delete this new customer
+ newCust.delete();
+
+ ApplyChangesCommand apply = commandGroup.getApplyChangesCommand();
+ apply.execute(root);
+
+ // Verify
+ root = read.executeQuery();
+ assertEquals(numCustomers, root.getList("CUSTOMER").size());
+
+ }
+
+ /**
+ * Yin Chen reports ... "In the class Statement, method: public int
+ * executeUpdate(Parameters parameters) - its tossing out RuntimeException
+ * when the value of the parameter is null. "
+ *
+ * His example build a update statement and sets one parameter value to be
+ * null. I will try to duplicate with an insert since that is simpler
+ *
+ */
+ public void testYingChen12162005() throws Exception {
+
+ Command insert = Command.FACTORY
+ .createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+ insert.setParameterValue("LASTNAME", "Williams");
+ insert.setParameterValue("ADDRESS", null);
+ insert.execute();
+
+ // Verify
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ /**
+ * Try a workaround using CommandGroup
+ */
+ public void testYingChen12162005Workaraound() throws Exception {
+
+ // Create the group and set common connection
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CustomerConfig.xml"));
+ commandGroup.setConnection(getConnection());
+
+ Command insert = commandGroup.getCommand("insert customer");
+ insert.setParameterValue("ID", new Integer(10));
+ insert.setParameterValue("LASTNAME", "Williams");
+ insert.setParameterValue("ADDRESS", null);
+ insert.execute();
+
+ // Verify
+ Command select = commandGroup.getCommand("read customer 10");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+
+
+
+ /**
+ * Should be able to explicitly set a parameter to null. But, should require
+ * that the parameter type is set.
+ */
+ public void testDiltonsNullParameterBug1() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+ insert.setParameterValue("LASTNAME", null);
+ insert.setParameterType("LASTNAME", SDODataTypes.STRING);
+ insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+ insert.execute();
+
+ //Verify
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+
+ /**
+ * Error by not setting a parameter
+ */
+ public void testDiltonsNullParameterBug2() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+// insert.setParameterValue("LASTNAME", null);
+ insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+
+ try {
+ insert.execute();
+ fail();
+ }
+ catch (RuntimeException e) {
+ //Expected since "LASTNAME" parameter not set
+ }
+ }
+
+ /**
+ * Set parameter to empty string
+ */
+ public void testDiltonsNullParameterBug3() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+ insert.setParameterValue("LASTNAME", "");
+ insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+ insert.execute();
+
+ //Verify
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ public void testUpdateChildThatHasGeneratedKey() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getConfig("CompanyConfig.xml"));
+
+ //Read a specific company based on the known ID
+ Command readCust = commandGroup.getCommand("all companies and departments");
+ DataObject root = readCust.executeQuery();
+ DataObject lastCustomer = root.getDataObject("COMPANY[3]");
+ Iterator i = lastCustomer.getList("departments").iterator();
+ Random generator = new Random();
+ int random = generator.nextInt(1000) + 1;
+ DataObject department;
+ while (i.hasNext()) {
+ department = (DataObject)i.next();
+ System.out.println("Modifying department: " + department.getString("NAME"));
+ department.setString("NAME", "Dept-" + random);
+ random = random + 1;
+ }
+
+ ApplyChangesCommand apply = commandGroup.getApplyChangesCommand();
+ apply.execute(root);
+
+ }
+
+
+
+ /**
+ * Test problem with Random
+ */
+ public void testRandomNumber() throws Exception {
+
+ Random generator = new Random();
+ int number = generator.nextInt(1000) + 1;
+ assertTrue(number > 0 & number <= 1000);
+
+ }
+
+
+ public void testTablePropertyName() throws Exception {
+
+ }
+
+
+
+
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java
new file mode 100644
index 0000000000..d52a34c265
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java
@@ -0,0 +1,149 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.ConfigHelper;
+import org.apache.tuscany.das.rdb.test.company.CompanyFactory;
+import org.apache.tuscany.das.rdb.test.customer.DataGraphRoot;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.TypeHelper;
+
+public class ExceptionTests extends DasTest {
+
+ public ExceptionTests() {
+ super();
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ new BookData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testMissingConnection() throws Exception {
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1");
+ try {
+ readCustomers.executeQuery();
+ fail("RuntimeException should be thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("A DASConnection object must be specified before executing the query.", ex.getMessage());
+ }
+
+ }
+
+ public void testMissingMapping() throws Exception {
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1");
+ readCustomers.setConnection(getConnection());
+ SDOUtil.registerStaticTypes(CompanyFactory.class);
+ readCustomers.setDataObjectModel(TypeHelper.INSTANCE.getType(DataGraphRoot.class));
+
+ try {
+ readCustomers.executeQuery();
+ fail("Exception should be thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("An SDO Type with name CUSTOMER was not found", ex.getMessage());
+ }
+
+ }
+
+ /**
+ * Test ability to describe problem when a user passes an empty stream
+ */
+ public void testEmptyStream() throws Exception {
+ try {
+ Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1", getConfig("NonExistingFile.xml"));
+ fail("Error should be thrown");
+ } catch (Error e) {
+ assertEquals(
+ "Cannot load configuration from a null InputStream. Possibly caused by an incorrect config xml file name",
+ e.getMessage());
+ }
+ }
+
+ /**
+ * Test ability to describe problem when a user passes an empty stream
+ */
+ public void testEmptyStream2() throws Exception {
+ try {
+ CommandGroup.FACTORY.createCommandGroup(getConfig("NonExistingFile.xml"));
+ fail("Error should be thrown");
+ } catch (Error e) {
+ assertEquals(
+ "Cannot load configuration from a null InputStream. Possibly caused by an incorrect config xml file name",
+ e.getMessage());
+ }
+ }
+
+
+ /**
+ * Test nice error message when Conofig does not use Aliased name
+ * Alis is defined for BOOK -> Book but PK config uses BOOK.BOOK_ID
+ *
+ * In this test case, the create is silently never performed!!!
+ *
+ * TODO - Uncomment out
+ */
+ public void test_4() throws Exception {
+
+ String statement = "SELECT * FROM BOOK WHERE BOOK.BOOK_ID = :ID";
+
+ // Create Table config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addTable("BOOK", "Book");
+ helper.addPrimaryKey("BOOK.BOOK_ID");
+
+ Command select = Command.FACTORY.createCommand(statement, helper.getConfig());
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", new Integer(1));
+
+ DataObject root = select.executeQuery();
+
+ DataObject newBook = root.createDataObject("Book");
+ newBook.setString("NAME", "Ant Colonies of the Old World");
+ newBook.setInt("BOOK_ID", 1001);
+ root.getList("Book").add(newBook);
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(helper.getConfig());
+ apply.setConnection(getConnection());
+ apply.execute(root);
+
+ //Verify
+ select.setParameterValue("ID", new Integer(1001));
+ root = select.executeQuery();
+ //TODO - Uncomment to test TUSCANY-250
+// assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME"));
+
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java
new file mode 100644
index 0000000000..3cc6b823c0
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java
@@ -0,0 +1,93 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersByLastnameCommand;
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersCommand;
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersStaticTypesCommand;
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersWithShapeCommand;
+import org.apache.tuscany.das.rdb.test.commands.SimpleReadCustomersWithShapeCommand;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.customer.DataGraphRoot;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class GeneratedCommandTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testReadCustomers() throws Exception {
+ ReadCustomersCommand cmd = new ReadCustomersCommand();
+ cmd.setConnection(getConnection());
+
+ DataObject root = cmd.executeQuery();
+ assertEquals(5, root.getList("CUSTOMER").size());
+ }
+
+ public void testReadSomeCustomers() throws Exception {
+ ReadCustomersByLastnameCommand cmd = new ReadCustomersByLastnameCommand();
+ cmd.setConnection(getConnection());
+ cmd.setParameterValue("LASTNAME", "Williams");
+
+ DataObject root = cmd.executeQuery();
+ assertEquals(4, root.getList("CUSTOMER").size());
+
+ }
+
+ public void testReadCustomersStaticTypes() throws Exception {
+ ReadCustomersStaticTypesCommand cmd = new ReadCustomersStaticTypesCommand();
+ cmd.setConnection(getConnection());
+ cmd.setParameterValue("LASTNAME", "Williams");
+
+ DataGraphRoot root = (DataGraphRoot) cmd.executeQuery();
+
+ List customers = root.getCustomers();
+ assertEquals(4, customers.size());
+
+ Customer cust1 = (Customer) customers.get(0);
+ assertEquals("Williams", cust1.getLastName());
+
+ }
+
+ public void testSimpleReadCustomersWithShape() throws Exception {
+ SimpleReadCustomersWithShapeCommand cmd = new SimpleReadCustomersWithShapeCommand();
+ cmd.setConnection(getConnection());
+ DataObject root = cmd.executeQuery();
+ assertEquals(5, root.getList("CUSTOMER").size());
+ }
+
+ public void testReadCustomersOrdersWithShape() throws Exception {
+ ReadCustomersWithShapeCommand cmd = new ReadCustomersWithShapeCommand();
+ cmd.setConnection(getConnection());
+
+ DataObject root = cmd.executeQuery();
+ assertEquals(5, root.getList("CUSTOMER").size());
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java
new file mode 100644
index 0000000000..28b9a2f1d8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java
@@ -0,0 +1,294 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * Generated IDs
+ *
+ *
+ */
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.DepartmentData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class GeneratedId extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ // Test insert into row with generated ID
+ public void testInsert() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into COMPANY (NAME) values (:NAME)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("NAME", "AAA Rental");
+ insert.execute();
+
+ // Verify insert
+ // Verify
+ Command select = Command.FACTORY.createCommand("Select ID, NAME from COMPANY");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ assertEquals(4, root.getList("COMPANY").size());
+ assertTrue(root.getInt("COMPANY[1]/ID") > 0);
+
+ }
+
+ // Test back to back insertions with the same command
+ public void testInsert2() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into COMPANY (NAME) values (:NAME)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("NAME", "AAA Rental");
+ insert.execute();
+
+ // insert another using same command
+ insert.setParameterValue("NAME", "BBB Rental");
+ insert.execute();
+
+ // Verify insert
+ // Verify
+ Command select = Command.FACTORY.createCommand("Select ID, NAME from COMPANY");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ assertEquals(5, root.getList("COMPANY").size());
+
+ }
+
+ // Test ability to retrieve and utilize the generated key
+ public void testInsert3() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into COMPANY (NAME) values (:NAME)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("NAME", "AAA Rental");
+ insert.execute();
+ Integer key = (Integer) insert.getParameterValue("generated_key");
+
+ // Verify insert
+ Command select = Command.FACTORY.createCommand("Select ID, NAME from COMPANY where ID = :ID");
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", key);
+ DataObject root = select.executeQuery();
+ assertEquals(key, root.get("COMPANY[1]/ID"));
+
+ }
+
+ // Test ability to propogate generated values back to owning data objects
+ public void testPropagateIds() throws Exception {
+
+ Command select = Command.FACTORY.createCommand("Select * from COMPANY");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create apply command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("CompanyConfig.xml"));
+ apply.setConnection(getConnection());
+
+ // verify pre-condition (id is not there until after flush)
+ assertNull(company.get("ID"));
+
+ // Flush changes
+ apply.execute(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ select = Command.FACTORY.createCommand("Select * from COMPANY where ID = :ID");
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ /**
+ * Same as above but metadata provided by XML config file
+ */
+ public void testPropagateIdsXML() throws Exception {
+
+ Command select = Command.FACTORY.createCommand("Select * from COMPANY",
+ getConfig("basicCompanyMapping.xml"));
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create apply command
+ ApplyChangesCommand apply = Command.FACTORY
+ .createApplyChangesCommand(getConfig("basicCompanyMapping.xml"));
+ apply.setConnection(getConnection());
+
+ // verify pre-condition (id is not there until after flush)
+ assertNull(company.get("ID"));
+
+ // Flush changes
+ apply.execute(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ select = Command.FACTORY.createCommand("Select * from COMPANY where ID = :ID");
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ /**
+ * Test ability to correctly flush heirarchy of objects that have generated
+ * keys
+ */
+ public void testFlushCreateHeirarchy() throws Exception {
+
+ String selectCompanys = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID";
+
+ Command select = Command.FACTORY.createCommand(selectCompanys,
+ getConfig("basicCompanyDepartmentMapping.xml"));
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create a new Department
+ // Do not set ID or CompanyID since these are generated
+ // ID INT, NAME VARCHAR(30), LOCATION VARCHAR(30), NUMBER VARCHAR(10),
+ // COMPANYID INT, EOTM INT
+ DataObject department = root.createDataObject("DEPARTMENT");
+ department.setString("NAME", "Do-rite Pest Control");
+ department.setString("LOCATION", "The boonies");
+ department.setString("NUMBER", "101");
+
+ // Associate the new department with the new company
+ company.getList("departments").add(department);
+
+ // Create apply command
+ ApplyChangesCommand apply = Command.FACTORY
+ .createApplyChangesCommand(getConfig("basicCompanyDepartmentMapping.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ String selectString = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID WHERE COMPANY.ID = :ID";
+
+ select = Command.FACTORY.createCommand(selectString);
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ /**
+ * Test ability to correctly flush heirarchy of objects that have generated
+ * keys even when a created object has legal but NULL property values
+ */
+ public void testFlushCreateHeirarchy2() throws Exception {
+
+ String selectCompanys = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID";
+
+ Command select = Command.FACTORY.createCommand(selectCompanys,
+ getConfig("basicCompanyDepartmentMapping.xml"));
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create a new Department
+ // Do not set ID or CompanyID since these are generated
+ // ID INT, NAME VARCHAR(30), LOCATION VARCHAR(30), NUMBER VARCHAR(10),
+ // COMPANYID INT, EOTM INT
+ DataObject department = root.createDataObject("DEPARTMENT");
+ department.setString("NAME", "Do-rite Pest Control");
+ // Do not set this property to force storing NULL to DB
+ // department.setString("LOCATION", "The boonies");
+ department.setString("NUMBER", "101");
+
+ // Associate the new department with the new company
+ company.getList("departments").add(department);
+
+ // Create apply command
+ ApplyChangesCommand apply = Command.FACTORY
+ .createApplyChangesCommand(getConfig("basicCompanyDepartmentMapping.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ String selectString = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID WHERE COMPANY.ID = :ID";
+
+ select = Command.FACTORY.createCommand(selectString);
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ // Test that error is thrown when no key has been generated (as in a select)
+ public void testRead() throws Exception {
+
+ Command select = Command.FACTORY.createCommand("Select * from COMPANY");
+ select.setConnection(getConnection());
+ select.executeQuery();
+
+ try {
+ select.getParameterValue("generated_id");
+ fail("Should throw Error");
+ } catch (RuntimeException e) {
+ // OK
+ }
+ }
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java
new file mode 100644
index 0000000000..1c8faf802f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java
@@ -0,0 +1,154 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import java.util.ArrayList;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.merge.impl.GraphMerger;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+
+import commonj.sdo.DataObject;
+
+public class GraphMergeTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+
+ public void testSingleTableMerge() throws Exception {
+
+ Command select = Command.FACTORY
+ .createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= :ID");
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", "3");
+ DataObject graph1 = select.executeQuery();
+ assertEquals(3, graph1.getList("CUSTOMER").size());
+
+ select.setParameterValue("ID", "5");
+ DataObject graph2 = select.executeQuery();
+ assertEquals(5, graph2.getList("CUSTOMER").size());
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ DataObject mergedGraph = merger.merge(graph1, graph2);
+
+ assertEquals(5, mergedGraph.getList("CUSTOMER").size());
+ }
+
+ public void testSingleTableMergeThreeGraphs() throws Exception {
+
+ Command select = Command.FACTORY
+ .createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= :ID");
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", "3");
+ DataObject graph1 = select.executeQuery();
+ assertEquals(3, graph1.getList("CUSTOMER").size());
+
+ select.setParameterValue("ID", "4");
+ DataObject graph2 = select.executeQuery();
+ assertEquals(4, graph2.getList("CUSTOMER").size());
+
+ select.setParameterValue("ID", "5");
+ DataObject graph3 = select.executeQuery();
+ assertEquals(5, graph3.getList("CUSTOMER").size());
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ ArrayList graphs = new ArrayList();
+ graphs.add(graph1);
+ graphs.add(graph2);
+ graphs.add(graph3);
+ DataObject mergedGraph = merger.merge(graphs);
+
+ assertEquals(5, mergedGraph.getList("CUSTOMER").size());
+
+ }
+
+
+ public void testMultiTableMerge2() throws Exception {
+ //Read some customers and related orders
+ Command select = Command.FACTORY.createCommand(
+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID", getConfig("CustomersOrdersConfig.xml"));
+ select.setConnection(getConnection());
+
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", new Integer(1));
+ DataObject graph1 = select.executeQuery();
+
+ DataObject customer = (DataObject)graph1.getList("CUSTOMER").get(0);
+ assertEquals(2, customer.getList("orders").size());
+
+ select.setParameterValue("ID", new Integer(2));
+ DataObject graph2 = select.executeQuery();
+ DataObject customer2 = (DataObject)graph2.getList("CUSTOMER").get(0);
+ assertEquals(1, graph2.getList("CUSTOMER").size());
+ assertEquals(1, customer2.getList("orders").size());
+ assertEquals(2, customer2.getInt("ID"));
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ merger.addPrimaryKey("ANORDER.ID");
+ DataObject mergedGraph = merger.merge(graph1, graph2);
+
+ assertEquals(3, mergedGraph.getList("ANORDER").size());
+ assertEquals(2, mergedGraph.getList("CUSTOMER").size());
+
+ DataObject mergedCustomer = (DataObject) mergedGraph.getList("CUSTOMER").get(1);
+ assertEquals(2, mergedCustomer.getInt("ID"));
+ assertEquals(1, mergedCustomer.getList("orders").size());
+ DataObject mergedOrder = (DataObject) mergedCustomer.getList("orders").get(0);
+ assertEquals(4, mergedOrder.getInt("ID"));
+
+ }
+
+ public void testMultiTableAppendSingleTable2() throws Exception {
+ //Read some customers and related orders
+ Command select = Command.FACTORY.createCommand(
+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID", getConfig("CustomersOrdersConfig.xml"));
+ select.setConnection(getConnection());
+
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", new Integer(1));
+ DataObject graph1 = select.executeQuery();
+
+ DataObject customer = (DataObject)graph1.getList("CUSTOMER").get(0);
+ assertEquals(2, customer.getList("orders").size());
+
+ Command select2 = Command.FACTORY.createCommand("select * from ANORDER");
+ select2.setConnection(getConnection());
+ DataObject graph2 = select2.executeQuery();
+ assertEquals(4, graph2.getList("ANORDER").size());
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ merger.addPrimaryKey("ANORDER.ID");
+ DataObject mergedGraph = merger.merge(graph1, graph2);
+ assertEquals(4, mergedGraph.getList("ANORDER").size());
+ assertEquals(1, mergedGraph.getList("CUSTOMER").size());
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/NameMappingTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/NameMappingTests.java
new file mode 100644
index 0000000000..7b127e5768
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/NameMappingTests.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ *
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+
+public class NameMappingTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test ability to assign DataObject type and propertyaliases with xml file
+ */
+ public void testRead() throws Exception {
+
+ // Read a customer
+ Command select = Command.FACTORY.createCommand(
+ "SELECT * FROM CUSTOMER WHERE CUSTOMER.ID = 1", getConfig("customerMapping.xml"));
+ select.setConnection(getConnection());
+
+ DataObject root = select.executeQuery();
+ DataObject customer = root.getDataObject("Customer[1]");
+ assertEquals(1, customer.getInt("id"));
+ assertEquals("1212 foobar lane", customer.getString("address"));
+ assertEquals("Williams", customer.getString("lastname"));
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java
new file mode 100644
index 0000000000..450e78ded2
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+
+import commonj.sdo.DataObject;
+
+public class OCCTests extends DasTest {
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new BookData(getAutoConnection()).refresh();
+ }
+
+
+ public void testSimpleOCC() throws Exception {
+
+ //Read a book instance
+ Command select = Command.FACTORY.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ //Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ // Explicitly change OCC column in database to force collision
+ Command update = Command.FACTORY
+ .createCommand("update BOOK set OCC = :OCC where BOOK_ID = 1");
+ update.setConnection(getConnection());
+ update.setParameterValue("OCC", new Integer(100));
+ update.execute();
+
+ //Try to flush the change
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("BooksConfig.xml"));
+ apply.setConnection(getConnection());
+
+ try {
+ apply.execute(root);
+ fail("An OCCException should be thrown");
+ } catch (RuntimeException ex) {
+ if ( !ex.getMessage().equals("OCC Exception") )
+ throw ex;
+ }
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
new file mode 100644
index 0000000000..050671e077
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
@@ -0,0 +1,155 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CompanyEmpData;
+import org.apache.tuscany.das.rdb.test.data.EmployeeData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class OneToOneRelationshipTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CompanyData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyEmpData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+
+ /**
+ * Read Company and traverse to EOTM
+ */
+ public void test1() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY
+ .createCommandGroup(getConfig("CompanyEmployeeConfig.xml"));
+
+ Command read = commandGroup.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject employee = root.getDataObject("COMPANY[1]/company->employee_opposite");
+
+ assertEquals("Mary Smith", employee.getString("NAME"));
+ }
+
+
+ /**
+ * Read Employee and traverse to Company
+ */
+ public void test2() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY
+ .createCommandGroup(getConfig("CompanyEmployeeConfig.xml"));
+
+ Command read = commandGroup.getCommand("get named employee with company");
+ read.setParameterValue("NAME", "Mary Smith");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("EMPLOYEE[1]/company->employee");
+
+ assertEquals("ACME Publishing", company.getString("NAME"));
+ }
+
+
+ /**
+ * Un-assign employee O' month
+ */
+ public void test3() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY
+ .createCommandGroup(getConfig("CompanyEmployeeConfig.xml"));
+
+ Command read = commandGroup.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("COMPANY[1]");
+ company.setDataObject("company->employee_opposite", null);
+ assertNull(company.getDataObject("company->employee_opposite"));
+
+ //Flush changes
+ commandGroup.getApplyChangesCommand().execute(root);
+
+ //Verify
+ root = read.executeQuery();
+ company = root.getDataObject("COMPANY[1]");
+ assertNull(company.getDataObject("company->employee_opposite"));
+ }
+
+ /**
+ * Delete employee O' month
+ */
+ public void test4() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY
+ .createCommandGroup(getConfig("CompanyEmployeeConfig.xml"));
+
+ Command read = commandGroup.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("COMPANY[1]");
+ DataObject employee = company.getDataObject("company->employee_opposite");
+ employee.delete();
+ assertNull(company.getDataObject("company->employee_opposite"));
+
+ //Flush changes
+ commandGroup.getApplyChangesCommand().execute(root);
+
+ //Verify
+ root = read.executeQuery();
+ company = root.getDataObject("COMPANY[1]");
+ assertNull(company.getDataObject("company->employee_opposite"));
+ }
+
+ /**
+ * Add new employee O' month
+ */
+ public void test5() throws Exception {
+
+ CommandGroup commandGroup = CommandGroup.FACTORY
+ .createCommandGroup(getConfig("CompanyEmployeeConfig.xml"));
+
+ Command read = commandGroup.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("COMPANY[1]");
+
+ //Create a new employee
+ DataObject employee = root.createDataObject("EMPLOYEE");
+ employee.setString ("NAME", "Joe Hotshot");
+
+ //Assigne a EOTM
+ //Strangely this statement results in "Could not find relationships" error
+ //although "company.setDataObject("company->employee_opposite", null);" dos not
+ company.setDataObject("company->employee_opposite", employee);
+
+ //Flush changes
+ commandGroup.getApplyChangesCommand().execute(root);
+
+ //Verify
+ root = read.executeQuery();
+ company = root.getDataObject("COMPANY[1]");
+
+ employee = root.getDataObject("COMPANY[1]/company->employee_opposite");
+
+ assertEquals("Joe Hotshot", employee.getString("NAME"));
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
new file mode 100644
index 0000000000..1207c769e5
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
@@ -0,0 +1,85 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.CityData;
+import org.apache.tuscany.das.rdb.test.data.StateData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class OperationOrderingTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ CityData city = new CityData(getAutoConnection());
+ StateData state = new StateData(getAutoConnection());
+
+ city.doDeletes();
+ state.doDeletes();
+ state.doInserts();
+ city.doInserts();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public OperationOrderingTests() {
+ super();
+ }
+
+ public void testInsert() throws Exception {
+ Command select = Command.FACTORY
+ .createCommand(
+ "Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID",
+ getConfig("cityStates.xml"));
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ int numberOfStates = root.getList("STATES").size();
+ int numberOfCities = root.getList("CITIES").size();
+
+ DataObject atlanta = root.createDataObject("CITIES");
+ atlanta.setString("NAME", "Atlanta");
+ atlanta.setInt("ID", 6);
+
+ // Create a new Company
+ DataObject georgia = root.createDataObject("STATES");
+ georgia.setInt("ID", 4);
+ georgia.setString("NAME", "GA");
+
+ georgia.getList("cities").add(atlanta);
+
+ // Create apply command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("cityStates.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute(root);
+
+ select.setConnection(getConnection());
+ root = select.executeQuery();
+ assertEquals(numberOfCities + 1, root.getList("CITIES").size());
+ assertEquals(numberOfStates + 1, root.getList("STATES").size());
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java
new file mode 100644
index 0000000000..250e7673d7
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java
@@ -0,0 +1,108 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.Pager;
+import org.apache.tuscany.das.rdb.impl.PagerImpl;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+
+import commonj.sdo.DataObject;
+
+
+
+public class Paging extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ public void testPaging() throws SQLException {
+
+ //Build command to read all customers
+ Command custCommand = Command.FACTORY.createCommand("select * from CUSTOMER order by ID");
+ custCommand.setConnection(getConnection());
+
+ //Create a pager with the command
+ Pager pager = new PagerImpl(custCommand, 2);
+
+ //Get and work with first page
+ DataObject root = pager.next();
+ DataObject customer1 = root.getDataObject("CUSTOMER[1]");
+ DataObject customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+
+ //Get and work with the second page
+ root = pager.next();
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(3, customer1.getInt("ID"));
+ assertEquals(4, customer2.getInt("ID"));
+
+ // First page again
+ root = pager.previous();
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+
+ }
+
+
+ public void testRandomPage() throws SQLException {
+ //Build the select command
+ Command select = Command.FACTORY
+ .createCommand("select * from CUSTOMER order by ID");
+
+ //Parameterize the command
+ select.setConnection(getConnection());
+
+ //Create a pager
+ Pager pager = new PagerImpl(select, 2);
+
+ //Get the first page
+ DataObject root = pager.getPage(1);
+ DataObject customer1 = root.getDataObject("CUSTOMER[1]");
+ DataObject customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+
+ //Get the second page
+ root = pager.getPage(2);
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(3, customer1.getInt("ID"));
+ assertEquals(4, customer2.getInt("ID"));
+
+
+ // Get the first page again
+ root = pager.getPage(1);
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+ }
+
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java
new file mode 100644
index 0000000000..b24dad33d9
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java
@@ -0,0 +1,103 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class PartialUpdateTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public PartialUpdateTests() {
+ super();
+ }
+
+ public void testPartialUpdate() throws SQLException {
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1");
+ readCustomers.setConnection(getConnection());
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+ // Verify
+ assertEquals(1, customer.getInt("ID"));
+
+ Command update = Command.FACTORY.createCommand("update CUSTOMER set LASTNAME = 'modified' where ID = 1");
+ update.setConnection(getConnection());
+ update.execute();
+
+ customer.setString("ADDRESS", "main street");
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+ apply.execute(root);
+
+ root = readCustomers.executeQuery();
+
+ // If partial update was not used, LASTNAME would not be 'modified'
+ customer = root.getDataObject("CUSTOMER[1]");
+ assertEquals(1, customer.getInt("ID"));
+ assertEquals("modified", customer.getString("LASTNAME"));
+ assertEquals("main street", customer.getString("ADDRESS"));
+ }
+
+ public void testPartialInsert() throws SQLException {
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1");
+ readCustomers.setConnection(getConnection());
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Create a new customer
+ DataObject newCust = root.createDataObject("CUSTOMER");
+ newCust.set("ID", new Integer(100));
+ newCust.set("ADDRESS", "5528 Wells Fargo Drive");
+ // Purposely do not set lastname to let it default to 'Garfugengheist'
+ // newCust.set("LASTNAME", "Gerkin" );
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+ apply.execute(root);
+
+ Command readNewCust = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 100");
+ readNewCust.setConnection(getConnection());
+ root = readNewCust.executeQuery();
+
+ // If partial insert was not used, LASTNAME would not be
+ // 'Garfugengheist'
+ newCust = root.getDataObject("CUSTOMER[1]");
+ assertEquals(100, newCust.getInt("ID"));
+ assertEquals("Garfugengheist", newCust.getString("LASTNAME"));
+ assertEquals("5528 Wells Fargo Drive", newCust.getString("ADDRESS"));
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java
new file mode 100644
index 0000000000..b38b117787
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java
@@ -0,0 +1,85 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * Test capability to participate in an extenrlly managed transaction. The
+ * client is managing the transaction boundary so the DAS will not issue
+ * commit/rollback
+ *
+ */
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class PassiveConnectionTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read and modify a customer. Uses a "passive" connection
+ */
+ public void testReadModifyApply() throws Exception {
+
+ // Create and initialize a DAS connection and initialize for externally
+ // managed transaction boundaries
+ java.sql.Connection c = getConnection();
+
+ try {
+
+ // Read customer 1
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(c);
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(c, false);
+
+ // Flush changes
+ apply.execute(root);
+
+ // Verify changes
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ // Since the DAS is not managing tx boundaries, I must
+ } catch (Exception e) {
+ c.rollback();
+ } finally {
+ c.commit();
+ }
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java
new file mode 100644
index 0000000000..d12e1f297b
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java
@@ -0,0 +1,157 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.ConfigHelper;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Tests the Converter framwork
+ */
+public class ProgrammaticConfigTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new BookData(getAutoConnection()).refresh();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Simple read followed by a write. This should fail since there is no
+ * config associaed with the applychanges command
+ */
+ public void test_1() throws Exception {
+
+ // Read a book instance
+ Command select = Command.FACTORY.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ // Flush the change
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+
+ try {
+ apply.execute(root);
+ fail("An exception should be thrown since here is no config to identify the primary key");
+ } catch (RuntimeException ex) {
+ // Expected
+ }
+ }
+
+ /**
+ * Simple read followed by a write. Config instance is generated
+ * programmatically using the ConfigHelper.
+ */
+ public void test_2() throws Exception {
+
+ // Read a book instance
+ Command select = Command.FACTORY.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ // Flush the change
+ // Create config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addPrimaryKey("BOOK.BOOK_ID");
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(helper.getConfig());
+ apply.setConnection(getConnection());
+
+ apply.execute(root);
+
+ // Verify
+ root = select.executeQuery();
+ book = root.getDataObject("BOOK[1]");
+ assertEquals(2, book.getInt("QUANTITY"));
+ }
+
+
+ /**
+ * Test ability to read a compound graph
+ */
+ public void test_3() throws Exception {
+
+ String statement = "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID WHERE CUSTOMER.ID = 1";
+
+ // Read some customers and related orders
+ // Create relationship config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID");
+
+ Command select = Command.FACTORY.createCommand(statement, helper.getConfig());
+ select.setConnection(getConnection());
+
+ DataObject root = select.executeQuery();
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ assertEquals(2, customer.getList("ANORDER").size());
+
+ }
+
+ /**
+ * Programatically create table config with "property" name
+ */
+ public void test_4() throws Exception {
+
+ String statement = "SELECT * FROM BOOK WHERE BOOK.BOOK_ID = :ID";
+
+ // Create Table config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addTable("BOOK", "Book");
+ helper.addPrimaryKey("Book.BOOK_ID");
+
+ Command select = Command.FACTORY.createCommand(statement, helper.getConfig());
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", new Integer(1));
+
+ DataObject root = select.executeQuery();
+
+ DataObject newBook = root.createDataObject("Book");
+ newBook.setString("NAME", "Ant Colonies of the Old World");
+ newBook.setInt("BOOK_ID", 1001);
+ root.getList("Book").add(newBook);
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(helper.getConfig());
+ apply.setConnection(getConnection());
+ apply.execute(root);
+
+ //Verify
+ select.setParameterValue("ID", new Integer(1001));
+ root = select.executeQuery();
+ assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME"));
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java
new file mode 100644
index 0000000000..7a74372551
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * Test the ability to query Database schema(metadata) information using regular DAS APIs
+ * This is speciic to DB2
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+
+public class ReadDBSchemaTests extends DasTest {
+
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+
+
+ public void testReadTableInfo() throws Exception {
+
+ Command select = Command.FACTORY.createCommand("SELECT * from SYSIBM.SYSTABLES WHERE TYPE = 'T'");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject table = (DataObject)root.get("SYSTABLES[1]");
+
+ assertEquals('T', table.getChar("TYPE"));
+
+ }
+
+
+
+ //Utilities
+
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java
new file mode 100644
index 0000000000..f67001b8b5
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java
@@ -0,0 +1,81 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.ResultSetShape;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+import org.apache.tuscany.das.rdb.test.data.PartData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+public class RecursiveTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new PartData(getAutoConnection()).refresh();
+ }
+
+ public void testReadEngineParts() throws Exception {
+
+ //Table definition
+ //CREATE TABLE PART (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), QUANTITY INT, PARENT_ID INT );
+
+ String threeLevelPartsSQL = "SELECT P1.*, P2.*, P3.* FROM PART AS P1 LEFT JOIN PART AS P2 ON P1.ID = P2.PARENT_ID "
+ + "LEFT JOIN PART AS P3 on P2.ID = P3.PARENT_ID WHERE P1.ID = 1";
+ Command select = Command.FACTORY.createCommand(threeLevelPartsSQL, getConfig("PartsConfig.xml"));
+ select.setConnection(getConnection());
+
+ String[] columns = {"ID", "NAME", "QUANTITY", "PARENT_ID", "ID", "NAME", "QUANTITY", "PARENT_ID", "ID", "NAME", "QUANTITY", "PARENT_ID"};
+ String[] tables = {"PART", "PART", "PART", "PART", "PART", "PART", "PART", "PART", "PART", "PART", "PART", "PART"};
+ Type[] types = {SDODataTypes.INTEGEROBJECT, SDODataTypes.STRING, SDODataTypes.INTEGEROBJECT, SDODataTypes.INTEGEROBJECT, SDODataTypes.INTEGEROBJECT, SDODataTypes.STRING, SDODataTypes.INTEGEROBJECT, SDODataTypes.INTEGEROBJECT, SDODataTypes.INTEGEROBJECT, SDODataTypes.STRING, SDODataTypes.INTEGEROBJECT, SDODataTypes.INTEGEROBJECT};
+ ResultSetShape shape = new ResultSetShape(tables, columns, types);
+
+ //Hack until we provide a nicer API
+ ((ReadCommandImpl)select).setResultSetShape(shape);
+
+ // Need to set the key explicitly. The aggregate of columns not working
+ // because of null values
+ DataObject root = select.executeQuery();
+
+ assertEquals(5, root.getList("PART").size());
+ // printList(root.getList("PART"));
+ DataObject engine = root.getDataObject("PART.0");
+ assertEquals("Engine", engine.getString("NAME"));
+
+ assertEquals(3, engine.getList("subparts").size());
+
+ DataObject piston = null;
+ Iterator i = engine.getList("subparts").iterator();
+ while ( i.hasNext() ) {
+ DataObject obj = (DataObject)i.next();
+ if ( obj.getString("NAME").equals("Piston"))
+ piston = obj;
+ }
+
+ assertEquals("Piston", piston.getString("NAME"));
+ assertEquals(1, piston.getList("subparts").size());
+ assertEquals("Piston Ring", piston.getDataObject("subparts.0").getString("NAME"));
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java
new file mode 100644
index 0000000000..aadcef13f3
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java
@@ -0,0 +1,121 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ *
+ *
+ */
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+
+public class RelationshipTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test ability to read a compound graph
+ */
+ public void testRead() throws Exception {
+
+ String statement = "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID WHERE CUSTOMER.ID = 1";
+
+ // Read some customers and related orders
+ Command select = Command.FACTORY.createCommand(statement, getConfig("customerOrderRelationshipMapping.xml"));
+ select.setConnection(getConnection());
+
+ DataObject root = select.executeQuery();
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ assertEquals(2, customer.getList("orders").size());
+
+ }
+
+ /**
+ * Same as above except uses xml file for relationhip and key information.
+ * Employs CUD generation.
+ */
+ public void testRelationshipModification2() throws Exception {
+
+ // Read some customers and related orders
+ Command select = Command.FACTORY
+ .createCommand(
+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID", getConfig("basicCustomerOrderMapping.xml"));
+ select.setConnection(getConnection());
+
+ DataObject root = select.executeQuery();
+
+ DataObject cust1 = root.getDataObject("CUSTOMER[1]");
+ DataObject cust2 = root.getDataObject("CUSTOMER[2]");
+
+ // Save IDs
+ Integer cust1ID = (Integer) cust1.get("ID");
+ Integer cust2ID = (Integer) cust2.get("ID");
+ // save order count
+ Integer cust1OrderCount = new Integer(cust1.getList("orders").size());
+ Integer cust2OrderCount = new Integer(cust2.getList("orders").size());
+
+ // Move an order to cust1 from cust2
+ DataObject order = (DataObject) cust2.getList("orders").get(0);
+ cust1.getList("orders").add(order);
+
+ // Build apply changes command
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("basicCustomerOrderMapping.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute(root);
+
+ // verify cust1 relationship updates
+ select = Command.FACTORY
+ .createCommand(
+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID",
+ getConfig("basicCustomerOrderMapping.xml"));
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", cust1ID);
+
+ root = select.executeQuery();
+ assertEquals(cust1OrderCount.intValue() + 1, root.getList(
+ "CUSTOMER[1]/orders").size());
+
+ // verify cust2 relationship updates
+ select.setParameterValue("ID", cust2ID);
+ root = select.executeQuery();
+ assertEquals(cust2OrderCount.intValue() - 1, root.getList(
+ "CUSTOMER[1]/orders").size());
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java
new file mode 100644
index 0000000000..e8bcfa9720
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java
@@ -0,0 +1,105 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.ResultSetShape;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+
+/**
+ * Test ability to specify format(shape) of the ResultSet. This is necessary
+ * when the JDBC driver in use does not provide adequate support for
+ * ResultSetMetadata. Also, we expect that specifying the result set shape will
+ * increase performance.
+ *
+ */
+public class ResultSetShapeTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testReadSingle() throws Exception {
+
+ // Using literals in the select forces invalid resultset metadata
+ String sqlString = "Select 99, 'Roosevelt', '1600 Pennsylvania Avenue' from customer";
+ String[] columns = { "ID", "LASTNAME", "ADDRESS" };
+ String[] tables = { "CUSTOMER", "CUSTOMER", "CUSTOMER" };
+ Type[] types = { SDODataTypes.LONG, SDODataTypes.STRING, SDODataTypes.STRING };
+
+ ResultSetShape shape = new ResultSetShape(tables, columns, types);
+
+ // Create and initialize command to read customers
+ Command readCustomers = Command.FACTORY.createCommand(sqlString,
+ getConfig("CustomerConfigWithIDConverter.xml"));
+ // Specify result shape
+ readCustomers.setResultSetShape(shape);
+
+ readCustomers.setConnection(getConnection());
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ assertEquals(5, root.getList("CUSTOMER").size());
+ assertEquals(99, root.getInt("CUSTOMER[1]/ID"));
+ assertEquals("Roosevelt", root.getString("CUSTOMER[1]/LASTNAME"));
+ assertEquals("1600 Pennsylvania Avenue", root.getString("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ /**
+ * Read a specific customer This duplicates the previous tests but does not
+ * provide the shape info. Since the select will not return valid metadata,
+ * this test is expected to fail
+ */
+ public void testReadSingleVerifyShapeUse() throws Exception {
+
+ // Using literals in the select forces invalid resultset metadata
+ String sqlString = "Select 99, 'Roosevelt', '1600 Pennsylvania Avenue' from customer";
+
+ // Create and initialize command to read customers
+ Command readCustomers = Command.FACTORY.createCommand(sqlString);
+ readCustomers.setConnection(getConnection());
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ try {
+ assertEquals(5, root.getList("CUSTOMER").size());
+ fail("Should fail since there will be no feature named CUSTOMER");
+ } catch (IllegalArgumentException e) {
+ // OK
+ }
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java
new file mode 100644
index 0000000000..0089e6b569
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java
@@ -0,0 +1,90 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * This class provides tests for all supported "types". The current plan is to
+ * use the Data type definitions provided in the SDO 2 specification. We must
+ * test the ability to use all of these types as well as different mapping from
+ * thse types to types used in the database. For example, a SDO Data Type
+ * "STRING", might be staored as a "TIMESTAMP" in DB2.
+ *
+ */
+
+import org.apache.tuscany.das.rdb.test.data.TypesData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+public class SerializationTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new TypesData(getAutoConnection()).refresh();
+ }
+
+ /**
+ * Read various types.
+ */
+
+
+public void testReadandSerialize() throws Exception {
+ /** Currently failing because of TUSCANY-22
+ Command select = Command.FACTORY
+ .createCommand("Select * from TYPETEST where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject obj = root.getDataObject("TYPETEST[1]");
+
+ assertTrue(obj.isSet("ID"));
+ assertTrue(obj.isSet("ATIMESTAMP"));
+ assertTrue(obj.isSet("ADECIMAL"));
+ assertTrue(obj.isSet("AFLOAT"));
+
+ //Java serilaization to file
+ FileOutputStream fos = null;
+ ObjectOutputStream out = null;
+ try {
+ fos = new FileOutputStream("serializedGraph.xml");
+ out = new ObjectOutputStream(fos);
+ out.writeObject(root);
+ out.flush();
+ } finally {
+ out.close();
+ fos.close();
+ }
+
+ //Reconstruct the graph
+ FileInputStream fis = null;
+ ObjectInputStream in = null;
+ DataObject root2;
+ try {
+ fis = new FileInputStream("serializedGraph.xml");
+ in = new ObjectInputStream(fis);
+ root2 = (DataObject) in.readObject();
+ } finally {
+ in.close();
+ fis.close();
+ }
+
+ assertEquals(1, root.getInt("TYPETEST[1]/ID"));
+ assertEquals(TypesData.getTimestamp(), (java.sql.Timestamp)root.get("TYPETEST[1]/ATIMESTAMP"));
+ assertEquals(1234567.89f, root2.getFloat("TYPETEST[1]/ADECIMAL"), .001);
+ assertEquals(1234567.89f, root2.getFloat("TYPETEST[1]/AFLOAT"), .001);
+
+ */
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java
new file mode 100644
index 0000000000..11ef87c8bc
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java
@@ -0,0 +1,256 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * These are the simplest possible uses of the JDBC DAS. In this mode, the
+ * programming model is not much more than JDBC
+ *
+ * The assumptions for these tests are:
+ *
+ * Single type
+ * Client explicitly Read/Create/Update/Delete commands
+ * No O/R mapping metadata
+ * SDO change history is not used
+ * Dynamic DataObjects
+ * No specified graph model
+ *
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+
+public class SimplestCrud extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testReadSingle() throws Exception {
+
+ //Create and initialize command to read customers
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1");
+ readCustomers.setConnection(getConnection());
+
+ //Read
+ DataObject root = readCustomers.executeQuery();
+
+ //Verify
+ assertEquals(1, root.getInt("CUSTOMER[1]/ID"));
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testReadSingle2() throws Exception {
+
+ //Create and initialize command to read customers
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where ID = 1");
+ readCustomers.setConnection(getConnection());
+
+ //Read
+ DataObject root = readCustomers.executeQuery();
+
+ DataObject cust = root.getDataObject("CUSTOMER[1]");
+
+// int n = (cust.getType().getProperties()).size();
+// for (int i=0; i<n; i++) {
+// System.out.println(cust.get(i));
+// }
+
+
+ //Verify
+ assertEquals(1, root.getInt("CUSTOMER[1]/ID"));
+ }
+
+ /**
+ * Read a specific customer
+ * Same as above but tests tolerance of white space in provided SQL
+ */
+ public void testReadSingleWithWhiteSpace() throws Exception {
+
+ //Create and initialize command to read customers
+ Command readCustomers = Command.FACTORY.createCommand(" select * from CUSTOMER where ID = 1");
+ readCustomers.setConnection(getConnection());
+
+ //Read
+ DataObject root = readCustomers.executeQuery();
+
+ //Verify
+ assertEquals(1, root.getInt("CUSTOMER[1]/ID"));
+ }
+
+ /**
+ * Read all customers with a specific last name
+ */
+ public void testReadMultiple() throws Exception {
+
+ //Create and initialize command to read customers
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where LASTNAME = 'Williams'");
+ readCustomers.setConnection(getConnection());
+
+ //Read
+ DataObject root = readCustomers.executeQuery();
+
+ //Verify
+ assertEquals(4, root.getList("CUSTOMER").size());
+ }
+
+ /**
+ * Read all customers with a specific last name
+ * LASTNAME value is provided via a parameter
+ */
+ public void testReadMultipleWithParameters() throws Exception {
+
+ //Create and initialize command to read customers
+ Command readCustomers = Command.FACTORY.createCommand("select * from CUSTOMER where LASTNAME = :LASTNAME");
+ readCustomers.setConnection(getConnection());
+
+ //Parameterize the command
+ readCustomers.setParameterValue("LASTNAME", "Williams");
+ DataObject root = readCustomers.executeQuery();
+
+ //Verify
+ assertEquals(4, root.getList("CUSTOMER").size());
+ }
+
+ public void testInsert() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (10, 'Williams', '5528 Wells Fargo Dr')");
+ insert.setConnection(getConnection());
+ insert.execute();
+
+ //Verify
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ public void testInsertWithParameters() throws Exception {
+
+ Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+ insert.setConnection(getConnection());
+ insert.setParameterValue("ID", new Integer(10));
+ insert.setParameterValue("LASTNAME", "Williams");
+ insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+ insert.execute();
+
+ //Verify
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+
+ public void testDelete() throws Exception {
+
+ //Verify pre-condition
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+
+ //Create and execute the delete command
+ Command delete = Command.FACTORY.createCommand("delete from CUSTOMER where ID = 1");
+ delete.setConnection(getConnection());
+ delete.execute();
+
+ //Verify delete by reusing the original select command
+ root = select.executeQuery();
+ assertEquals(0, root.getList("CUSTOMER").size());
+
+ }
+
+
+ public void testUpdate() throws Exception {
+
+ //Verify pre-condition
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ Command update = Command.FACTORY.createCommand("update CUSTOMER set LASTNAME = 'Pavick' where ID = 1");
+ update.setConnection(getConnection());
+ update.execute();
+
+ //Verify update - reuse select command
+ root = select.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ public void testUpdateWithParameters() throws Exception {
+
+ //Verify pre-condition
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ Command update = Command.FACTORY.createCommand("update CUSTOMER set LASTNAME = :LASTNAME where ID = :ID");
+ update.setConnection(getConnection());
+ update.setParameterValue("LASTNAME", "Pavick");
+ update.setParameterValue("ID", new Integer(1));
+ update.execute();
+
+ //Verify update - reuse select command
+ root = select.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ public void testUpdateWithParmarkers() throws Exception {
+
+ //Verify pre-condition
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ Command update = Command.FACTORY.createCommand("update CUSTOMER set LASTNAME = ? where ID = ?");
+ update.setConnection(getConnection());
+ update.setParameterValue(1, "Pavick");
+ update.setParameterValue(2, new Integer(1));
+ update.execute();
+
+ //Verify update - reuse select command
+ root = select.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java
new file mode 100644
index 0000000000..ec72e02b73
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java
@@ -0,0 +1,194 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.Parameter;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+
+public class StoredProcs extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ // Call a simple stored proc to read all companies
+ public void testGetCompanies() throws Exception {
+
+ Command read = Command.FACTORY.createCommand("{call GETALLCOMPANIES()}");
+ read.setConnection(getConnection());
+ DataObject root = read.executeQuery();
+
+ //Verify
+ assertEquals(3, root.getList("COMPANY").size());
+ assertTrue(root.getInt("COMPANY[1]/ID") > 0);
+
+ }
+
+ public void testGetNamedCompany() throws Exception {
+
+ Command read = Command.FACTORY.createCommand("{call GETNAMEDCOMPANY(?)}");
+
+ read.setConnection(getConnection());
+ read.setParameterValue(1, "MegaCorp");
+ DataObject root = read.executeQuery();
+
+ assertEquals("MegaCorp", root.getString("COMPANY[1]/NAME"));
+
+ }
+
+ public void testGetNamedCompanyByName() throws Exception {
+ Command read = Command.FACTORY
+ .createCommand("{call GETNAMEDCOMPANY(:NAME)}");
+
+ read.setConnection(getConnection());
+ read.setParameterValue("NAME", "MegaCorp");
+ DataObject root = read.executeQuery();
+
+ assertEquals("MegaCorp", root.getString("COMPANY[1]/NAME"));
+ }
+
+
+ // Retreive heirarchy using a stored proc ... new programming model
+ public void testGetCustomersAndOrder() throws Exception {
+
+ Command read = Command.FACTORY.createCommand("{call getCustomerAndOrders(?)}", getConfig("CustomersOrdersConfig.xml"));
+ read.setConnection(getConnection());
+ read.setParameterValue(1, new Integer(1));
+
+ DataObject root = read.executeQuery();
+
+ DataObject customer = (DataObject) root.getList("CUSTOMER").get(0);
+ assertEquals(2, customer.getList("orders").size());
+
+ }
+
+ /**
+ * Call a stored proc requiring an in parameter and producing an out
+ * parameter and a resultset
+ *
+ * This stored proc takes a lastname argument and returns a graph of
+ * customers with that last name. The number of read customers is returned
+ * in the out parameter
+ */
+ public void testGetNamedCustomers() throws Exception {
+
+ Command read = Command.FACTORY.createCommand("{call GETNAMEDCUSTOMERS(?,?)}");
+ read.setConnection(getConnection());
+ read.setParameterValue(1, "Williams");
+ read.addParameter(2, Parameter.OUT, SDODataTypes.INTEGER);
+ DataObject root = read.executeQuery();
+
+ Integer customersRead = (Integer) read.getParameterValue(2);
+
+ assertEquals(4, customersRead.intValue());
+ assertEquals(customersRead.intValue(), root.getList("CUSTOMER").size());
+
+ }
+
+ //TODO - Resolve issue with programmatic creation of GETNAMEDCUSTOMERS on DB2 and
+ //re-enable this test
+
+
+ // Simplest possible SP write
+ public void testDelete() throws Exception {
+
+ Command delete = Command.FACTORY.createCommand("{call DELETECUSTOMER(?)}");
+ delete.setConnection(getConnection());
+ delete.setParameterValue(1, new Integer(1));
+ delete.execute();
+
+ // Verify DELETE
+ Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+ assertTrue(root.getList("CUSTOMER").isEmpty());
+
+ }
+
+/* // For debug
+ public void testRawCall() throws Exception {
+
+ Connection c = getConnection();
+ CallableStatement cs = c.prepareCall("{call GETNAMEDCUSTOMERS(?,?)}");
+ ParameterMetaData pm = cs.getParameterMetaData();
+ int count = pm.getParameterCount();
+ for (int i = 1; i <= count; i++) {
+ int mode = pm.getParameterMode(i);
+ if (mode == ParameterMetaData.parameterModeOut
+ || mode == ParameterMetaData.parameterModeInOut)
+ cs.registerOutParameter(i, pm.getParameterType(i));
+ }
+ cs.setString(1, "Williams");
+ // cs.registerOutParameter(2,java.sql.Types.INTEGER);
+ boolean isResultSet = cs.execute();
+ System.out.println("Has a result set => " + isResultSet);
+ ResultSet rs = cs.getResultSet();
+
+ if (isResultSet) {
+ System.out.println("Results are: ");
+ while (rs.next()) {
+ System.out.println(rs.getObject(2));
+ }
+ }
+ System.out.println("Count is =>" + cs.getObject(2));
+ c.commit();
+ }
+
+ // For debug
+ public void testRawCall2() throws Exception {
+
+ Connection c = getConnection();
+ CallableStatement cs = c.prepareCall("{call getCustomerAndOrders(?)}");
+ cs.setObject(1, new Integer(1));
+ boolean isResultSet = cs.execute();
+ System.out.println("call getCustomerAndOrders(?) has a result set => "
+ + isResultSet);
+ ResultSet rs = cs.getResultSet();
+
+ write(rs);
+ c.commit();
+ }
+
+ public void testGetAllOrders() throws Exception {
+
+ System.out.println("all orders");
+ Connection c = getConnection();
+ PreparedStatement s = c.prepareStatement("select * from anorder");
+ write (s.executeQuery());
+ c.commit();
+
+ }*/
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java
new file mode 100644
index 0000000000..7829e69e07
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java
@@ -0,0 +1,85 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+import java.io.IOException;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.customer.AnOrder;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.customer.DataGraphRoot;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.TypeHelper;
+
+public class TopDown extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+ // Uses dynamic SDOs but user provides the model
+ public void testUserProvidedModelDynamic() throws SQLException, IOException {
+
+ // Build the select command
+ Command select = Command.FACTORY
+ .createCommand(
+ "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID",
+ getConfig("1xM_mapping_no_cud.xml"));
+
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+
+// Set the object model
+ select.setDataObjectModel(TypeHelper.INSTANCE.getType(DataGraphRoot.class));
+
+
+ // Parameterize the command
+ select.setConnection(getConnection());
+ select.setParameterValue("ID", new Integer(1));
+
+ // Get the graph - DataGraphRoot is from the typed package
+ DataGraphRoot root = (DataGraphRoot) select.executeQuery();
+
+ // Modify a customer
+ Customer customer = (Customer) root.getCustomers().get(0);
+ customer.setLastName("Pavick");
+
+ // Modify an order
+ AnOrder order = (AnOrder) customer.getOrders().get(0);
+ order.setProduct("Kitchen Sink 001");
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand(getConfig("1xM_mapping_no_cud.xml"));
+ apply.setConnection(getConnection());
+
+ // Flush changes
+ apply.execute((DataObject) root);
+
+ }
+
+
+} \ No newline at end of file
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java
new file mode 100644
index 0000000000..e49c5f7630
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java
@@ -0,0 +1,96 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test;
+
+/*
+ * This class provides tests for all supported "types". The current plan is to use the Data
+ * type definitions provided in the SDO 2 specification. We must test the ability to use
+ * all of these types as well as different mapping from thse types to types used in the
+ * database. For example, a SDO Data Type "STRING", might be staored as a "TIMESTAMP" in DB2.
+ *
+ */
+
+import java.sql.Timestamp;
+import java.util.Date;
+
+import org.apache.tuscany.das.rdb.ApplyChangesCommand;
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.data.TypesData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+
+import commonj.sdo.DataObject;
+
+
+public class TypeTests extends DasTest {
+
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new TypesData(getAutoConnection()).refresh();
+ }
+
+ /**
+ * Read various types.
+ */
+ public void testRead() throws Exception {
+
+ //Read customer 1
+ Command select = Command.FACTORY.createCommand("Select * from TYPETEST where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject types = (DataObject)root.get("TYPETEST[1]");
+
+ java.sql.Timestamp ts = (java.sql.Timestamp)types.get("ATIMESTAMP");
+ assertEquals(ts, TypesData.getTimestamp());
+
+ float decimal = types.getFloat("ADECIMAL");
+ assertEquals(1234567.89f, decimal, .0001);
+
+ }
+
+
+ /**
+ * Write various types.
+ * TODO - Need to rethink the Timestamp write. My current thinking id that writes of non-SDO2 defined types
+ * require a converter
+ */
+/* public void testWrite() throws Exception {
+
+ //Read customer 1
+ Command select = Command.FACTORY.createCommand("Select * from TYPETEST where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject types = (DataObject)root.get("TYPETEST[1]");
+ Date now = new Date();
+ types.set("ATIMESTAMP", now);
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+ apply.addPrimaryKey("TYPETEST.ID");
+ apply.execute(root);
+
+ //Verify
+ root = select.executeQuery();
+ java.sql.Timestamp ts = (java.sql.Timestamp)types.get("ATIMESTAMP");
+ assertEquals(now, ts);
+
+ }*/
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java
new file mode 100644
index 0000000000..09a6147118
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java
@@ -0,0 +1,54 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.commands;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.impl.ConfigFactoryImpl;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+
+public class ReadCustomersByLastnameCommand extends ReadCommandImpl {
+
+ private static final String sqlString = "select * from CUSTOMER where LASTNAME = :LASTNAME";
+ private static final Config mapping;
+
+ static {
+ ConfigFactory factory = ConfigFactoryImpl.eINSTANCE;
+ mapping = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setName("CUSTOMER");
+ mapping.getTable().add(t);
+ }
+
+ public ReadCustomersByLastnameCommand() {
+ super(sqlString, mapping);
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java
new file mode 100644
index 0000000000..615ef12dab
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java
@@ -0,0 +1,55 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.test.commands;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.impl.ConfigFactoryImpl;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+
+public class ReadCustomersCommand extends ReadCommandImpl {
+
+ private static final String sqlString = "select * from CUSTOMER";
+ private static final Config mapping;
+
+ static {
+ ConfigFactory factory = ConfigFactoryImpl.eINSTANCE;
+ mapping = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setName("CUSTOMER");
+ mapping.getTable().add(t);
+ }
+
+ public ReadCustomersCommand() {
+ super(sqlString, mapping);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java
new file mode 100644
index 0000000000..c8dcdebb68
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java
@@ -0,0 +1,62 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.test.commands;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.impl.ConfigFactoryImpl;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+import org.apache.tuscany.das.rdb.test.customer.DataGraphRoot;
+
+import commonj.sdo.helper.TypeHelper;
+
+
+public class ReadCustomersStaticTypesCommand extends ReadCommandImpl {
+
+ private static final String sqlString = "Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = :LASTNAME";
+ private static final Config mapping;
+
+ static {
+ ConfigFactory factory = ConfigFactoryImpl.eINSTANCE;
+ mapping = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setName("CUSTOMER");
+ t.setPropertyName("Customer");
+ mapping.getTable().add(t);
+ }
+
+ public ReadCustomersStaticTypesCommand() {
+ super(sqlString, mapping);
+ setDataObjectModel(TypeHelper.INSTANCE.getType(DataGraphRoot.class));
+ }
+
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java
new file mode 100644
index 0000000000..82d8cefbc2
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java
@@ -0,0 +1,40 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.commands;
+
+import org.apache.tuscany.das.rdb.ResultSetShape;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+import commonj.sdo.Type;
+
+public class ReadCustomersWithShapeCommand extends ReadCommandImpl {
+
+ // This sql string ensures that we won't have resultset metadata
+ private static final String sqlString = "Select * from customer union select * from customer";
+
+ private static final String[] columns = {"ID", "LASTNAME", "ADDRESS"};
+ private static final String[] tables = {"CUSTOMER", "CUSTOMER", "CUSTOMER"};
+ private static final Type[] types = {SDODataTypes.INT, SDODataTypes.STRING, SDODataTypes.STRING};
+
+ public ReadCustomersWithShapeCommand() {
+ super(sqlString);
+ ResultSetShape shape = new ResultSetShape(tables, columns, types);
+ setResultSetShape(shape);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java
new file mode 100644
index 0000000000..1f45ba317f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java
@@ -0,0 +1,66 @@
+/**
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed 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.das.rdb.test.commands;
+
+import org.apache.tuscany.das.rdb.ResultSetShape;
+import org.apache.tuscany.das.rdb.SDODataTypes;
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.impl.ConfigFactoryImpl;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+import commonj.sdo.Type;
+
+public class SimpleReadCustomersWithShapeCommand extends ReadCommandImpl {
+
+ // This sql string ensures that we won't have resultset metadata
+ private static final String sqlString = "Select * from customer union select * from customer";
+
+ private static final String[] columns = {"ID", "LASTNAME", "ADDRESS"};
+ private static final String[] tables = {"CUSTOMER", "CUSTOMER", "CUSTOMER"};
+ private static final Type[] types = {SDODataTypes.INT, SDODataTypes.STRING, SDODataTypes.STRING};
+
+ private static final Config mapping;
+
+ static {
+ ConfigFactory factory = ConfigFactoryImpl.eINSTANCE;
+ mapping = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setName("CUSTOMER");
+ mapping.getTable().add(t);
+ }
+
+ public SimpleReadCustomersWithShapeCommand() {
+ super(sqlString, mapping);
+ ResultSetShape shape = new ResultSetShape(tables, columns, types);
+ setResultSetShape(shape);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyFactory.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyFactory.java
new file mode 100644
index 0000000000..a30b607b24
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyFactory.java
@@ -0,0 +1,73 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public interface CompanyFactory
+{
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ CompanyFactory INSTANCE = org.apache.tuscany.das.rdb.test.company.impl.CompanyFactoryImpl.eINSTANCE;
+
+ /**
+ * Returns a new object of class '<em>Type</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Type</em>'.
+ * @generated
+ */
+ CompanyType createCompanyType();
+
+ /**
+ * Returns a new object of class '<em>Datagraph Root</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Datagraph Root</em>'.
+ * @generated
+ */
+ DatagraphRoot createDatagraphRoot();
+
+ /**
+ * Returns a new object of class '<em>Department Type</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Department Type</em>'.
+ * @generated
+ */
+ DepartmentType createDepartmentType();
+
+ /**
+ * Returns a new object of class '<em>Employee Type</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Employee Type</em>'.
+ * @generated
+ */
+ EmployeeType createEmployeeType();
+
+} //CompanyFactory
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyType.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyType.java
new file mode 100644
index 0000000000..bba21c0661
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/CompanyType.java
@@ -0,0 +1,101 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company;
+
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getDepartments <em>Departments</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getEmployeeOfTheMonth <em>Employee Of The Month</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public interface CompanyType
+{
+ /**
+ * Returns the value of the '<em><b>Departments</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.company.DepartmentType}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Departments</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Departments</em>' containment reference list.
+ * @generated
+ */
+ List getDepartments();
+
+ /**
+ * Returns the value of the '<em><b>Employee Of The Month</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Employee Of The Month</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Employee Of The Month</em>' attribute.
+ * @see #setEmployeeOfTheMonth(String)
+ * @generated
+ */
+ String getEmployeeOfTheMonth();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getEmployeeOfTheMonth <em>Employee Of The Month</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Employee Of The Month</em>' attribute.
+ * @see #getEmployeeOfTheMonth()
+ * @generated
+ */
+ void setEmployeeOfTheMonth(String value);
+
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+} // CompanyType
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DatagraphRoot.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DatagraphRoot.java
new file mode 100644
index 0000000000..81ae283bbe
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DatagraphRoot.java
@@ -0,0 +1,81 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company;
+
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Datagraph Root</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getCompanies <em>Companies</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getDepartments <em>Departments</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getEmployees <em>Employees</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public interface DatagraphRoot
+{
+ /**
+ * Returns the value of the '<em><b>Companies</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.company.CompanyType}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Companies</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Companies</em>' containment reference list.
+ * @generated
+ */
+ List getCompanies();
+
+ /**
+ * Returns the value of the '<em><b>Departments</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.company.DepartmentType}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Departments</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Departments</em>' containment reference list.
+ * @generated
+ */
+ List getDepartments();
+
+ /**
+ * Returns the value of the '<em><b>Employees</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.company.EmployeeType}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Employees</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Employees</em>' containment reference list.
+ * @generated
+ */
+ List getEmployees();
+
+} // DatagraphRoot
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DepartmentType.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DepartmentType.java
new file mode 100644
index 0000000000..522779b51d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/DepartmentType.java
@@ -0,0 +1,153 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company;
+
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Department Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getEmployees <em>Employees</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getLocation <em>Location</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getName <em>Name</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getNumber <em>Number</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public interface DepartmentType
+{
+ /**
+ * Returns the value of the '<em><b>Employees</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.company.EmployeeType}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Employees</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Employees</em>' containment reference list.
+ * @generated
+ */
+ List getEmployees();
+
+ /**
+ * Returns the value of the '<em><b>Location</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Location</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Location</em>' attribute.
+ * @see #setLocation(String)
+ * @generated
+ */
+ String getLocation();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getLocation <em>Location</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Location</em>' attribute.
+ * @see #getLocation()
+ * @generated
+ */
+ void setLocation(String value);
+
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Number</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Number</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Number</em>' attribute.
+ * @see #isSetNumber()
+ * @see #unsetNumber()
+ * @see #setNumber(int)
+ * @generated
+ */
+ int getNumber();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getNumber <em>Number</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Number</em>' attribute.
+ * @see #isSetNumber()
+ * @see #unsetNumber()
+ * @see #getNumber()
+ * @generated
+ */
+ void setNumber(int value);
+
+ /**
+ * Unsets the value of the '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getNumber <em>Number</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isSetNumber()
+ * @see #getNumber()
+ * @see #setNumber(int)
+ * @generated
+ */
+ void unsetNumber();
+
+ /**
+ * Returns whether the value of the '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getNumber <em>Number</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>Number</em>' attribute is set.
+ * @see #unsetNumber()
+ * @see #getNumber()
+ * @see #setNumber(int)
+ * @generated
+ */
+ boolean isSetNumber();
+
+} // DepartmentType
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/EmployeeType.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/EmployeeType.java
new file mode 100644
index 0000000000..0e7a18034c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/EmployeeType.java
@@ -0,0 +1,137 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Employee Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#isManager <em>Manager</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#getName <em>Name</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#getSN <em>SN</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public interface EmployeeType
+{
+ /**
+ * Returns the value of the '<em><b>Manager</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Manager</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Manager</em>' attribute.
+ * @see #isSetManager()
+ * @see #unsetManager()
+ * @see #setManager(boolean)
+ * @generated
+ */
+ boolean isManager();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#isManager <em>Manager</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Manager</em>' attribute.
+ * @see #isSetManager()
+ * @see #unsetManager()
+ * @see #isManager()
+ * @generated
+ */
+ void setManager(boolean value);
+
+ /**
+ * Unsets the value of the '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#isManager <em>Manager</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isSetManager()
+ * @see #isManager()
+ * @see #setManager(boolean)
+ * @generated
+ */
+ void unsetManager();
+
+ /**
+ * Returns whether the value of the '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#isManager <em>Manager</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>Manager</em>' attribute is set.
+ * @see #unsetManager()
+ * @see #isManager()
+ * @see #setManager(boolean)
+ * @generated
+ */
+ boolean isSetManager();
+
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>SN</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>SN</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>SN</em>' attribute.
+ * @see #setSN(String)
+ * @generated
+ */
+ String getSN();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#getSN <em>SN</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>SN</em>' attribute.
+ * @see #getSN()
+ * @generated
+ */
+ void setSN(String value);
+
+} // EmployeeType
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyFactoryImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyFactoryImpl.java
new file mode 100644
index 0000000000..55812441d8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyFactoryImpl.java
@@ -0,0 +1,174 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company.impl;
+
+import org.apache.tuscany.das.rdb.test.company.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CompanyFactoryImpl extends EFactoryImpl implements CompanyFactory
+{
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final CompanyFactoryImpl eINSTANCE = init();
+
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static CompanyFactoryImpl init()
+ {
+ try
+ {
+ CompanyFactoryImpl theCompanyFactory = (CompanyFactoryImpl)EPackage.Registry.INSTANCE.getEFactory("org.apache.tuscany.das.rdb.test/company.xsd");
+ if (theCompanyFactory != null)
+ {
+ return theCompanyFactory;
+ }
+ }
+ catch (Exception exception)
+ {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new CompanyFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CompanyFactoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EObject create(EClass eClass)
+ {
+ switch (eClass.getClassifierID())
+ {
+ case CompanyPackageImpl.COMPANY_TYPE: return (EObject)createCompanyType();
+ case CompanyPackageImpl.DATAGRAPH_ROOT: return (EObject)createDatagraphRoot();
+ case CompanyPackageImpl.DEPARTMENT_TYPE: return (EObject)createDepartmentType();
+ case CompanyPackageImpl.DOCUMENT_ROOT: return (EObject)createDocumentRoot();
+ case CompanyPackageImpl.EMPLOYEE_TYPE: return (EObject)createEmployeeType();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CompanyType createCompanyType()
+ {
+ CompanyTypeImpl companyType = new CompanyTypeImpl();
+ return companyType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public DatagraphRoot createDatagraphRoot()
+ {
+ DatagraphRootImpl datagraphRoot = new DatagraphRootImpl();
+ return datagraphRoot;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public DepartmentType createDepartmentType()
+ {
+ DepartmentTypeImpl departmentType = new DepartmentTypeImpl();
+ return departmentType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EObject createDocumentRoot()
+ {
+ EObject documentRoot = super.create(CompanyPackageImpl.Literals.DOCUMENT_ROOT);
+ return documentRoot;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EmployeeType createEmployeeType()
+ {
+ EmployeeTypeImpl employeeType = new EmployeeTypeImpl();
+ return employeeType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CompanyPackageImpl getCompanyPackageImpl()
+ {
+ return (CompanyPackageImpl)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ public static CompanyPackageImpl getPackage()
+ {
+ return CompanyPackageImpl.eINSTANCE;
+ }
+
+} //CompanyFactoryImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyPackageImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyPackageImpl.java
new file mode 100644
index 0000000000..9a079816fd
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyPackageImpl.java
@@ -0,0 +1,1258 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company.impl;
+
+import org.apache.tuscany.das.rdb.test.company.CompanyFactory;
+import org.apache.tuscany.das.rdb.test.company.CompanyType;
+import org.apache.tuscany.das.rdb.test.company.DatagraphRoot;
+import org.apache.tuscany.das.rdb.test.company.DepartmentType;
+import org.apache.tuscany.das.rdb.test.company.EmployeeType;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.CompanyFactory
+ * @generated
+ */
+public class CompanyPackageImpl extends EPackageImpl
+{
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String eNAME = "company";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String eNS_URI = "org.apache.tuscany.das.rdb.test/company.xsd";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String eNS_PREFIX = "company";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final CompanyPackageImpl eINSTANCE = org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.company.impl.CompanyTypeImpl <em>Type</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyTypeImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getCompanyType()
+ * @generated
+ */
+ public static final int COMPANY_TYPE = 0;
+
+ /**
+ * The feature id for the '<em><b>Departments</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int COMPANY_TYPE__DEPARTMENTS = 0;
+
+ /**
+ * The feature id for the '<em><b>Employee Of The Month</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH = 1;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int COMPANY_TYPE__NAME = 2;
+
+ /**
+ * The number of structural features of the '<em>Type</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int COMPANY_TYPE_FEATURE_COUNT = 3;
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.company.impl.DatagraphRootImpl <em>Datagraph Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.DatagraphRootImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getDatagraphRoot()
+ * @generated
+ */
+ public static final int DATAGRAPH_ROOT = 1;
+
+ /**
+ * The feature id for the '<em><b>Companies</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DATAGRAPH_ROOT__COMPANIES = 0;
+
+ /**
+ * The feature id for the '<em><b>Departments</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DATAGRAPH_ROOT__DEPARTMENTS = 1;
+
+ /**
+ * The feature id for the '<em><b>Employees</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DATAGRAPH_ROOT__EMPLOYEES = 2;
+
+ /**
+ * The number of structural features of the '<em>Datagraph Root</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DATAGRAPH_ROOT_FEATURE_COUNT = 3;
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl <em>Department Type</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getDepartmentType()
+ * @generated
+ */
+ public static final int DEPARTMENT_TYPE = 2;
+
+ /**
+ * The feature id for the '<em><b>Employees</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DEPARTMENT_TYPE__EMPLOYEES = 0;
+
+ /**
+ * The feature id for the '<em><b>Location</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DEPARTMENT_TYPE__LOCATION = 1;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DEPARTMENT_TYPE__NAME = 2;
+
+ /**
+ * The feature id for the '<em><b>Number</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DEPARTMENT_TYPE__NUMBER = 3;
+
+ /**
+ * The number of structural features of the '<em>Department Type</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DEPARTMENT_TYPE_FEATURE_COUNT = 4;
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.company.impl.DocumentRootImpl <em>Document Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.DocumentRootImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getDocumentRoot()
+ * @generated
+ */
+ public static final int DOCUMENT_ROOT = 3;
+
+ /**
+ * The feature id for the '<em><b>Mixed</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DOCUMENT_ROOT__MIXED = 0;
+
+ /**
+ * The feature id for the '<em><b>XMLNS Prefix Map</b></em>' map.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DOCUMENT_ROOT__XMLNS_PREFIX_MAP = 1;
+
+ /**
+ * The feature id for the '<em><b>XSI Schema Location</b></em>' map.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DOCUMENT_ROOT__XSI_SCHEMA_LOCATION = 2;
+
+ /**
+ * The feature id for the '<em><b>Company</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DOCUMENT_ROOT__COMPANY = 3;
+
+ /**
+ * The number of structural features of the '<em>Document Root</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DOCUMENT_ROOT_FEATURE_COUNT = 4;
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.company.impl.EmployeeTypeImpl <em>Employee Type</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.EmployeeTypeImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getEmployeeType()
+ * @generated
+ */
+ public static final int EMPLOYEE_TYPE = 4;
+
+ /**
+ * The feature id for the '<em><b>Manager</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int EMPLOYEE_TYPE__MANAGER = 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int EMPLOYEE_TYPE__NAME = 1;
+
+ /**
+ * The feature id for the '<em><b>SN</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int EMPLOYEE_TYPE__SN = 2;
+
+ /**
+ * The number of structural features of the '<em>Employee Type</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int EMPLOYEE_TYPE_FEATURE_COUNT = 3;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass companyTypeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass datagraphRootEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass departmentTypeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass documentRootEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass employeeTypeEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private CompanyPackageImpl()
+ {
+ super(eNS_URI, ((EFactory)CompanyFactory.INSTANCE));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this
+ * model, and for any others upon which it depends. Simple
+ * dependencies are satisfied by calling this method on all
+ * dependent packages before doing anything else. This method drives
+ * initialization for interdependent packages directly, in parallel
+ * with this package, itself.
+ * <p>Of this package and its interdependencies, all packages which
+ * have not yet been registered by their URI values are first created
+ * and registered. The packages are then initialized in two steps:
+ * meta-model objects for all of the packages are created before any
+ * are initialized, since one package's meta-model objects may refer to
+ * those of another.
+ * <p>Invocation of this method will not affect any packages that have
+ * already been initialized.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static CompanyPackageImpl init()
+ {
+ if (isInited) return (CompanyPackageImpl)EPackage.Registry.INSTANCE.getEPackage(CompanyPackageImpl.eNS_URI);
+
+ // Obtain or create and register package
+ CompanyPackageImpl theCompanyPackageImpl = (CompanyPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof CompanyPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new CompanyPackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ XMLTypePackage.eINSTANCE.eClass();
+
+ // Create package meta-data objects
+ theCompanyPackageImpl.createPackageContents();
+
+ // Initialize created meta-data
+ theCompanyPackageImpl.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theCompanyPackageImpl.freeze();
+
+ return theCompanyPackageImpl;
+ }
+
+
+ /**
+ * Returns the meta object for class '{@link org.apache.tuscany.das.rdb.test.company.CompanyType <em>Type</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Type</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.CompanyType
+ * @generated
+ */
+ public EClass getCompanyType()
+ {
+ return companyTypeEClass;
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getDepartments <em>Departments</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Departments</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.CompanyType#getDepartments()
+ * @see #getCompanyType()
+ * @generated
+ */
+ public EReference getCompanyType_Departments()
+ {
+ return (EReference)companyTypeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getEmployeeOfTheMonth <em>Employee Of The Month</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Employee Of The Month</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.CompanyType#getEmployeeOfTheMonth()
+ * @see #getCompanyType()
+ * @generated
+ */
+ public EAttribute getCompanyType_EmployeeOfTheMonth()
+ {
+ return (EAttribute)companyTypeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.CompanyType#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.CompanyType#getName()
+ * @see #getCompanyType()
+ * @generated
+ */
+ public EAttribute getCompanyType_Name()
+ {
+ return (EAttribute)companyTypeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * Returns the meta object for class '{@link org.apache.tuscany.das.rdb.test.company.DatagraphRoot <em>Datagraph Root</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Datagraph Root</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DatagraphRoot
+ * @generated
+ */
+ public EClass getDatagraphRoot()
+ {
+ return datagraphRootEClass;
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getCompanies <em>Companies</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Companies</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getCompanies()
+ * @see #getDatagraphRoot()
+ * @generated
+ */
+ public EReference getDatagraphRoot_Companies()
+ {
+ return (EReference)datagraphRootEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getDepartments <em>Departments</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Departments</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getDepartments()
+ * @see #getDatagraphRoot()
+ * @generated
+ */
+ public EReference getDatagraphRoot_Departments()
+ {
+ return (EReference)datagraphRootEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getEmployees <em>Employees</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Employees</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DatagraphRoot#getEmployees()
+ * @see #getDatagraphRoot()
+ * @generated
+ */
+ public EReference getDatagraphRoot_Employees()
+ {
+ return (EReference)datagraphRootEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * Returns the meta object for class '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType <em>Department Type</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Department Type</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DepartmentType
+ * @generated
+ */
+ public EClass getDepartmentType()
+ {
+ return departmentTypeEClass;
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getEmployees <em>Employees</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Employees</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DepartmentType#getEmployees()
+ * @see #getDepartmentType()
+ * @generated
+ */
+ public EReference getDepartmentType_Employees()
+ {
+ return (EReference)departmentTypeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getLocation <em>Location</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Location</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DepartmentType#getLocation()
+ * @see #getDepartmentType()
+ * @generated
+ */
+ public EAttribute getDepartmentType_Location()
+ {
+ return (EAttribute)departmentTypeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DepartmentType#getName()
+ * @see #getDepartmentType()
+ * @generated
+ */
+ public EAttribute getDepartmentType_Name()
+ {
+ return (EAttribute)departmentTypeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.DepartmentType#getNumber <em>Number</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Number</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.DepartmentType#getNumber()
+ * @see #getDepartmentType()
+ * @generated
+ */
+ public EAttribute getDepartmentType_Number()
+ {
+ return (EAttribute)departmentTypeEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.ecore.EObject <em>Document Root</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Document Root</em>'.
+ * @see org.eclipse.emf.ecore.EObject
+ * @generated
+ */
+ public EClass getDocumentRoot()
+ {
+ return documentRootEClass;
+ }
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.emf.ecore.EObject#getMixed <em>Mixed</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Mixed</em>'.
+ * @see org.eclipse.emf.ecore.EObject#getMixed()
+ * @see #getDocumentRoot()
+ * @generated
+ */
+ public EAttribute getDocumentRoot_Mixed()
+ {
+ return (EAttribute)documentRootEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the map '{@link org.eclipse.emf.ecore.EObject#getXMLNSPrefixMap <em>XMLNS Prefix Map</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the map '<em>XMLNS Prefix Map</em>'.
+ * @see org.eclipse.emf.ecore.EObject#getXMLNSPrefixMap()
+ * @see #getDocumentRoot()
+ * @generated
+ */
+ public EReference getDocumentRoot_XMLNSPrefixMap()
+ {
+ return (EReference)documentRootEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the meta object for the map '{@link org.eclipse.emf.ecore.EObject#getXSISchemaLocation <em>XSI Schema Location</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the map '<em>XSI Schema Location</em>'.
+ * @see org.eclipse.emf.ecore.EObject#getXSISchemaLocation()
+ * @see #getDocumentRoot()
+ * @generated
+ */
+ public EReference getDocumentRoot_XSISchemaLocation()
+ {
+ return (EReference)documentRootEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * Returns the meta object for the containment reference '{@link org.eclipse.emf.ecore.EObject#getCompany <em>Company</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference '<em>Company</em>'.
+ * @see org.eclipse.emf.ecore.EObject#getCompany()
+ * @see #getDocumentRoot()
+ * @generated
+ */
+ public EReference getDocumentRoot_Company()
+ {
+ return (EReference)documentRootEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * Returns the meta object for class '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType <em>Employee Type</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Employee Type</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.EmployeeType
+ * @generated
+ */
+ public EClass getEmployeeType()
+ {
+ return employeeTypeEClass;
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#isManager <em>Manager</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Manager</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.EmployeeType#isManager()
+ * @see #getEmployeeType()
+ * @generated
+ */
+ public EAttribute getEmployeeType_Manager()
+ {
+ return (EAttribute)employeeTypeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.EmployeeType#getName()
+ * @see #getEmployeeType()
+ * @generated
+ */
+ public EAttribute getEmployeeType_Name()
+ {
+ return (EAttribute)employeeTypeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.company.EmployeeType#getSN <em>SN</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>SN</em>'.
+ * @see org.apache.tuscany.das.rdb.test.company.EmployeeType#getSN()
+ * @see #getEmployeeType()
+ * @generated
+ */
+ public EAttribute getEmployeeType_SN()
+ {
+ return (EAttribute)employeeTypeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ public CompanyFactory getCompanyFactory()
+ {
+ return (CompanyFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents()
+ {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ companyTypeEClass = createEClass(COMPANY_TYPE);
+ createEReference(companyTypeEClass, COMPANY_TYPE__DEPARTMENTS);
+ createEAttribute(companyTypeEClass, COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH);
+ createEAttribute(companyTypeEClass, COMPANY_TYPE__NAME);
+
+ datagraphRootEClass = createEClass(DATAGRAPH_ROOT);
+ createEReference(datagraphRootEClass, DATAGRAPH_ROOT__COMPANIES);
+ createEReference(datagraphRootEClass, DATAGRAPH_ROOT__DEPARTMENTS);
+ createEReference(datagraphRootEClass, DATAGRAPH_ROOT__EMPLOYEES);
+
+ departmentTypeEClass = createEClass(DEPARTMENT_TYPE);
+ createEReference(departmentTypeEClass, DEPARTMENT_TYPE__EMPLOYEES);
+ createEAttribute(departmentTypeEClass, DEPARTMENT_TYPE__LOCATION);
+ createEAttribute(departmentTypeEClass, DEPARTMENT_TYPE__NAME);
+ createEAttribute(departmentTypeEClass, DEPARTMENT_TYPE__NUMBER);
+
+ documentRootEClass = createEClass(DOCUMENT_ROOT);
+ createEAttribute(documentRootEClass, DOCUMENT_ROOT__MIXED);
+ createEReference(documentRootEClass, DOCUMENT_ROOT__XMLNS_PREFIX_MAP);
+ createEReference(documentRootEClass, DOCUMENT_ROOT__XSI_SCHEMA_LOCATION);
+ createEReference(documentRootEClass, DOCUMENT_ROOT__COMPANY);
+
+ employeeTypeEClass = createEClass(EMPLOYEE_TYPE);
+ createEAttribute(employeeTypeEClass, EMPLOYEE_TYPE__MANAGER);
+ createEAttribute(employeeTypeEClass, EMPLOYEE_TYPE__NAME);
+ createEAttribute(employeeTypeEClass, EMPLOYEE_TYPE__SN);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents()
+ {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ XMLTypePackage theXMLTypePackage = (XMLTypePackage)EPackage.Registry.INSTANCE.getEPackage(XMLTypePackage.eNS_URI);
+
+ // Add supertypes to classes
+
+ // Initialize classes and features; add operations and parameters
+ initEClass(companyTypeEClass, CompanyType.class, "CompanyType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getCompanyType_Departments(), this.getDepartmentType(), null, "departments", null, 1, -1, CompanyType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getCompanyType_EmployeeOfTheMonth(), theXMLTypePackage.getIDREF(), "employeeOfTheMonth", null, 0, 1, CompanyType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getCompanyType_Name(), theXMLTypePackage.getString(), "name", null, 0, 1, CompanyType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(datagraphRootEClass, DatagraphRoot.class, "DatagraphRoot", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getDatagraphRoot_Companies(), this.getCompanyType(), null, "companies", null, 0, -1, DatagraphRoot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getDatagraphRoot_Departments(), this.getDepartmentType(), null, "departments", null, 0, -1, DatagraphRoot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getDatagraphRoot_Employees(), this.getEmployeeType(), null, "employees", null, 0, -1, DatagraphRoot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(departmentTypeEClass, DepartmentType.class, "DepartmentType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getDepartmentType_Employees(), this.getEmployeeType(), null, "employees", null, 1, -1, DepartmentType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getDepartmentType_Location(), theXMLTypePackage.getString(), "location", null, 0, 1, DepartmentType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getDepartmentType_Name(), theXMLTypePackage.getString(), "name", null, 0, 1, DepartmentType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getDepartmentType_Number(), theXMLTypePackage.getInt(), "number", null, 0, 1, DepartmentType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(documentRootEClass, null, "DocumentRoot", !IS_ABSTRACT, !IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getDocumentRoot_Mixed(), ecorePackage.getEFeatureMapEntry(), "mixed", null, 0, -1, null, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getDocumentRoot_XMLNSPrefixMap(), ecorePackage.getEStringToStringMapEntry(), null, "xMLNSPrefixMap", null, 0, -1, null, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getDocumentRoot_XSISchemaLocation(), ecorePackage.getEStringToStringMapEntry(), null, "xSISchemaLocation", null, 0, -1, null, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getDocumentRoot_Company(), this.getCompanyType(), null, "company", null, 0, -2, null, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+
+ initEClass(employeeTypeEClass, EmployeeType.class, "EmployeeType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEmployeeType_Manager(), theXMLTypePackage.getBoolean(), "manager", null, 0, 1, EmployeeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEmployeeType_Name(), theXMLTypePackage.getString(), "name", null, 0, 1, EmployeeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEmployeeType_SN(), theXMLTypePackage.getID(), "sN", null, 0, 1, EmployeeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+
+ // Create annotations
+ // http:///org/eclipse/emf/ecore/util/ExtendedMetaData
+ createExtendedMetaDataAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void createExtendedMetaDataAnnotations()
+ {
+ String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";
+ addAnnotation
+ (companyTypeEClass,
+ source,
+ new String[]
+ {
+ "name", "CompanyType",
+ "kind", "elementOnly"
+ });
+ addAnnotation
+ (getCompanyType_Departments(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "departments"
+ });
+ addAnnotation
+ (getCompanyType_EmployeeOfTheMonth(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "employeeOfTheMonth"
+ });
+ addAnnotation
+ (getCompanyType_Name(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "name"
+ });
+ addAnnotation
+ (datagraphRootEClass,
+ source,
+ new String[]
+ {
+ "name", "DatagraphRoot",
+ "kind", "elementOnly"
+ });
+ addAnnotation
+ (getDatagraphRoot_Companies(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "companies"
+ });
+ addAnnotation
+ (getDatagraphRoot_Departments(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "departments"
+ });
+ addAnnotation
+ (getDatagraphRoot_Employees(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "employees"
+ });
+ addAnnotation
+ (departmentTypeEClass,
+ source,
+ new String[]
+ {
+ "name", "DepartmentType",
+ "kind", "elementOnly"
+ });
+ addAnnotation
+ (getDepartmentType_Employees(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "employees"
+ });
+ addAnnotation
+ (getDepartmentType_Location(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "location"
+ });
+ addAnnotation
+ (getDepartmentType_Name(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "name"
+ });
+ addAnnotation
+ (getDepartmentType_Number(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "number"
+ });
+ addAnnotation
+ (documentRootEClass,
+ source,
+ new String[]
+ {
+ "name", "",
+ "kind", "mixed"
+ });
+ addAnnotation
+ (getDocumentRoot_Mixed(),
+ source,
+ new String[]
+ {
+ "kind", "elementWildcard",
+ "name", ":mixed"
+ });
+ addAnnotation
+ (getDocumentRoot_XMLNSPrefixMap(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "xmlns:prefix"
+ });
+ addAnnotation
+ (getDocumentRoot_XSISchemaLocation(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "xsi:schemaLocation"
+ });
+ addAnnotation
+ (getDocumentRoot_Company(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "company",
+ "namespace", "##targetNamespace"
+ });
+ addAnnotation
+ (employeeTypeEClass,
+ source,
+ new String[]
+ {
+ "name", "EmployeeType",
+ "kind", "empty"
+ });
+ addAnnotation
+ (getEmployeeType_Manager(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "manager"
+ });
+ addAnnotation
+ (getEmployeeType_Name(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "name"
+ });
+ addAnnotation
+ (getEmployeeType_SN(),
+ source,
+ new String[]
+ {
+ "kind", "attribute",
+ "name", "SN"
+ });
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public interface Literals
+ {
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.company.impl.CompanyTypeImpl <em>Type</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyTypeImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getCompanyType()
+ * @generated
+ */
+ public static final EClass COMPANY_TYPE = eINSTANCE.getCompanyType();
+
+ /**
+ * The meta object literal for the '<em><b>Departments</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference COMPANY_TYPE__DEPARTMENTS = eINSTANCE.getCompanyType_Departments();
+
+ /**
+ * The meta object literal for the '<em><b>Employee Of The Month</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH = eINSTANCE.getCompanyType_EmployeeOfTheMonth();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute COMPANY_TYPE__NAME = eINSTANCE.getCompanyType_Name();
+
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.company.impl.DatagraphRootImpl <em>Datagraph Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.DatagraphRootImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getDatagraphRoot()
+ * @generated
+ */
+ public static final EClass DATAGRAPH_ROOT = eINSTANCE.getDatagraphRoot();
+
+ /**
+ * The meta object literal for the '<em><b>Companies</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DATAGRAPH_ROOT__COMPANIES = eINSTANCE.getDatagraphRoot_Companies();
+
+ /**
+ * The meta object literal for the '<em><b>Departments</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DATAGRAPH_ROOT__DEPARTMENTS = eINSTANCE.getDatagraphRoot_Departments();
+
+ /**
+ * The meta object literal for the '<em><b>Employees</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DATAGRAPH_ROOT__EMPLOYEES = eINSTANCE.getDatagraphRoot_Employees();
+
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl <em>Department Type</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getDepartmentType()
+ * @generated
+ */
+ public static final EClass DEPARTMENT_TYPE = eINSTANCE.getDepartmentType();
+
+ /**
+ * The meta object literal for the '<em><b>Employees</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DEPARTMENT_TYPE__EMPLOYEES = eINSTANCE.getDepartmentType_Employees();
+
+ /**
+ * The meta object literal for the '<em><b>Location</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute DEPARTMENT_TYPE__LOCATION = eINSTANCE.getDepartmentType_Location();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute DEPARTMENT_TYPE__NAME = eINSTANCE.getDepartmentType_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Number</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute DEPARTMENT_TYPE__NUMBER = eINSTANCE.getDepartmentType_Number();
+
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.company.impl.DocumentRootImpl <em>Document Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.DocumentRootImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getDocumentRoot()
+ * @generated
+ */
+ public static final EClass DOCUMENT_ROOT = eINSTANCE.getDocumentRoot();
+
+ /**
+ * The meta object literal for the '<em><b>Mixed</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute DOCUMENT_ROOT__MIXED = eINSTANCE.getDocumentRoot_Mixed();
+
+ /**
+ * The meta object literal for the '<em><b>XMLNS Prefix Map</b></em>' map feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DOCUMENT_ROOT__XMLNS_PREFIX_MAP = eINSTANCE.getDocumentRoot_XMLNSPrefixMap();
+
+ /**
+ * The meta object literal for the '<em><b>XSI Schema Location</b></em>' map feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DOCUMENT_ROOT__XSI_SCHEMA_LOCATION = eINSTANCE.getDocumentRoot_XSISchemaLocation();
+
+ /**
+ * The meta object literal for the '<em><b>Company</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DOCUMENT_ROOT__COMPANY = eINSTANCE.getDocumentRoot_Company();
+
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.company.impl.EmployeeTypeImpl <em>Employee Type</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.company.impl.EmployeeTypeImpl
+ * @see org.apache.tuscany.das.rdb.test.company.impl.CompanyPackageImpl#getEmployeeType()
+ * @generated
+ */
+ public static final EClass EMPLOYEE_TYPE = eINSTANCE.getEmployeeType();
+
+ /**
+ * The meta object literal for the '<em><b>Manager</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute EMPLOYEE_TYPE__MANAGER = eINSTANCE.getEmployeeType_Manager();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute EMPLOYEE_TYPE__NAME = eINSTANCE.getEmployeeType_Name();
+
+ /**
+ * The meta object literal for the '<em><b>SN</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute EMPLOYEE_TYPE__SN = eINSTANCE.getEmployeeType_SN();
+
+ }
+
+} //CompanyPackageImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyTypeImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyTypeImpl.java
new file mode 100644
index 0000000000..76caa0bcdc
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/CompanyTypeImpl.java
@@ -0,0 +1,303 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.test.company.CompanyType;
+import org.apache.tuscany.das.rdb.test.company.DepartmentType;
+
+import org.apache.tuscany.sdo.impl.DataObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.CompanyTypeImpl#getDepartments <em>Departments</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.CompanyTypeImpl#getEmployeeOfTheMonth <em>Employee Of The Month</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.CompanyTypeImpl#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CompanyTypeImpl extends DataObjectImpl implements CompanyType
+{
+ /**
+ * The cached value of the '{@link #getDepartments() <em>Departments</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDepartments()
+ * @generated
+ * @ordered
+ */
+ protected EList departments = null;
+
+ /**
+ * The default value of the '{@link #getEmployeeOfTheMonth() <em>Employee Of The Month</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEmployeeOfTheMonth()
+ * @generated
+ * @ordered
+ */
+ protected static final String EMPLOYEE_OF_THE_MONTH_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getEmployeeOfTheMonth() <em>Employee Of The Month</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEmployeeOfTheMonth()
+ * @generated
+ * @ordered
+ */
+ protected String employeeOfTheMonth = EMPLOYEE_OF_THE_MONTH_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected CompanyTypeImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EClass eStaticClass()
+ {
+ return CompanyPackageImpl.Literals.COMPANY_TYPE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getDepartments()
+ {
+ if (departments == null)
+ {
+ departments = new EObjectContainmentEList(DepartmentType.class, this, CompanyPackageImpl.COMPANY_TYPE__DEPARTMENTS);
+ }
+ return departments;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getEmployeeOfTheMonth()
+ {
+ return employeeOfTheMonth;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setEmployeeOfTheMonth(String newEmployeeOfTheMonth)
+ {
+ String oldEmployeeOfTheMonth = employeeOfTheMonth;
+ employeeOfTheMonth = newEmployeeOfTheMonth;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH, oldEmployeeOfTheMonth, employeeOfTheMonth));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName)
+ {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.COMPANY_TYPE__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.COMPANY_TYPE__DEPARTMENTS:
+ return ((InternalEList)getDepartments()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.COMPANY_TYPE__DEPARTMENTS:
+ return getDepartments();
+ case CompanyPackageImpl.COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH:
+ return getEmployeeOfTheMonth();
+ case CompanyPackageImpl.COMPANY_TYPE__NAME:
+ return getName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.COMPANY_TYPE__DEPARTMENTS:
+ getDepartments().clear();
+ getDepartments().addAll((Collection)newValue);
+ return;
+ case CompanyPackageImpl.COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH:
+ setEmployeeOfTheMonth((String)newValue);
+ return;
+ case CompanyPackageImpl.COMPANY_TYPE__NAME:
+ setName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.COMPANY_TYPE__DEPARTMENTS:
+ getDepartments().clear();
+ return;
+ case CompanyPackageImpl.COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH:
+ setEmployeeOfTheMonth(EMPLOYEE_OF_THE_MONTH_EDEFAULT);
+ return;
+ case CompanyPackageImpl.COMPANY_TYPE__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.COMPANY_TYPE__DEPARTMENTS:
+ return departments != null && !departments.isEmpty();
+ case CompanyPackageImpl.COMPANY_TYPE__EMPLOYEE_OF_THE_MONTH:
+ return EMPLOYEE_OF_THE_MONTH_EDEFAULT == null ? employeeOfTheMonth != null : !EMPLOYEE_OF_THE_MONTH_EDEFAULT.equals(employeeOfTheMonth);
+ case CompanyPackageImpl.COMPANY_TYPE__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String toString()
+ {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (employeeOfTheMonth: ");
+ result.append(employeeOfTheMonth);
+ result.append(", name: ");
+ result.append(name);
+ result.append(')');
+ return result.toString();
+ }
+
+} //CompanyTypeImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DatagraphRootImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DatagraphRootImpl.java
new file mode 100644
index 0000000000..cde59e98ed
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DatagraphRootImpl.java
@@ -0,0 +1,252 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.test.company.CompanyType;
+import org.apache.tuscany.das.rdb.test.company.DatagraphRoot;
+import org.apache.tuscany.das.rdb.test.company.DepartmentType;
+import org.apache.tuscany.das.rdb.test.company.EmployeeType;
+
+import org.apache.tuscany.sdo.impl.DataObjectImpl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Datagraph Root</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.DatagraphRootImpl#getCompanies <em>Companies</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.DatagraphRootImpl#getDepartments <em>Departments</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.DatagraphRootImpl#getEmployees <em>Employees</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DatagraphRootImpl extends DataObjectImpl implements DatagraphRoot
+{
+ /**
+ * The cached value of the '{@link #getCompanies() <em>Companies</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCompanies()
+ * @generated
+ * @ordered
+ */
+ protected EList companies = null;
+
+ /**
+ * The cached value of the '{@link #getDepartments() <em>Departments</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDepartments()
+ * @generated
+ * @ordered
+ */
+ protected EList departments = null;
+
+ /**
+ * The cached value of the '{@link #getEmployees() <em>Employees</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEmployees()
+ * @generated
+ * @ordered
+ */
+ protected EList employees = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DatagraphRootImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EClass eStaticClass()
+ {
+ return CompanyPackageImpl.Literals.DATAGRAPH_ROOT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getCompanies()
+ {
+ if (companies == null)
+ {
+ companies = new EObjectContainmentEList(CompanyType.class, this, CompanyPackageImpl.DATAGRAPH_ROOT__COMPANIES);
+ }
+ return companies;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getDepartments()
+ {
+ if (departments == null)
+ {
+ departments = new EObjectContainmentEList(DepartmentType.class, this, CompanyPackageImpl.DATAGRAPH_ROOT__DEPARTMENTS);
+ }
+ return departments;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getEmployees()
+ {
+ if (employees == null)
+ {
+ employees = new EObjectContainmentEList(EmployeeType.class, this, CompanyPackageImpl.DATAGRAPH_ROOT__EMPLOYEES);
+ }
+ return employees;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DATAGRAPH_ROOT__COMPANIES:
+ return ((InternalEList)getCompanies()).basicRemove(otherEnd, msgs);
+ case CompanyPackageImpl.DATAGRAPH_ROOT__DEPARTMENTS:
+ return ((InternalEList)getDepartments()).basicRemove(otherEnd, msgs);
+ case CompanyPackageImpl.DATAGRAPH_ROOT__EMPLOYEES:
+ return ((InternalEList)getEmployees()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DATAGRAPH_ROOT__COMPANIES:
+ return getCompanies();
+ case CompanyPackageImpl.DATAGRAPH_ROOT__DEPARTMENTS:
+ return getDepartments();
+ case CompanyPackageImpl.DATAGRAPH_ROOT__EMPLOYEES:
+ return getEmployees();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DATAGRAPH_ROOT__COMPANIES:
+ getCompanies().clear();
+ getCompanies().addAll((Collection)newValue);
+ return;
+ case CompanyPackageImpl.DATAGRAPH_ROOT__DEPARTMENTS:
+ getDepartments().clear();
+ getDepartments().addAll((Collection)newValue);
+ return;
+ case CompanyPackageImpl.DATAGRAPH_ROOT__EMPLOYEES:
+ getEmployees().clear();
+ getEmployees().addAll((Collection)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DATAGRAPH_ROOT__COMPANIES:
+ getCompanies().clear();
+ return;
+ case CompanyPackageImpl.DATAGRAPH_ROOT__DEPARTMENTS:
+ getDepartments().clear();
+ return;
+ case CompanyPackageImpl.DATAGRAPH_ROOT__EMPLOYEES:
+ getEmployees().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DATAGRAPH_ROOT__COMPANIES:
+ return companies != null && !companies.isEmpty();
+ case CompanyPackageImpl.DATAGRAPH_ROOT__DEPARTMENTS:
+ return departments != null && !departments.isEmpty();
+ case CompanyPackageImpl.DATAGRAPH_ROOT__EMPLOYEES:
+ return employees != null && !employees.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //DatagraphRootImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DepartmentTypeImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DepartmentTypeImpl.java
new file mode 100644
index 0000000000..9ceb2d8da7
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/DepartmentTypeImpl.java
@@ -0,0 +1,395 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.test.company.DepartmentType;
+import org.apache.tuscany.das.rdb.test.company.EmployeeType;
+
+import org.apache.tuscany.sdo.impl.DataObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Department Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl#getEmployees <em>Employees</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl#getLocation <em>Location</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.DepartmentTypeImpl#getNumber <em>Number</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DepartmentTypeImpl extends DataObjectImpl implements DepartmentType
+{
+ /**
+ * The cached value of the '{@link #getEmployees() <em>Employees</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEmployees()
+ * @generated
+ * @ordered
+ */
+ protected EList employees = null;
+
+ /**
+ * The default value of the '{@link #getLocation() <em>Location</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLocation()
+ * @generated
+ * @ordered
+ */
+ protected static final String LOCATION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLocation() <em>Location</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLocation()
+ * @generated
+ * @ordered
+ */
+ protected String location = LOCATION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getNumber() <em>Number</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getNumber()
+ * @generated
+ * @ordered
+ */
+ protected static final int NUMBER_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getNumber() <em>Number</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getNumber()
+ * @generated
+ * @ordered
+ */
+ protected int number = NUMBER_EDEFAULT;
+
+ /**
+ * This is true if the Number attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean numberESet = false;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DepartmentTypeImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EClass eStaticClass()
+ {
+ return CompanyPackageImpl.Literals.DEPARTMENT_TYPE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getEmployees()
+ {
+ if (employees == null)
+ {
+ employees = new EObjectContainmentEList(EmployeeType.class, this, CompanyPackageImpl.DEPARTMENT_TYPE__EMPLOYEES);
+ }
+ return employees;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getLocation()
+ {
+ return location;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setLocation(String newLocation)
+ {
+ String oldLocation = location;
+ location = newLocation;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.DEPARTMENT_TYPE__LOCATION, oldLocation, location));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName)
+ {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.DEPARTMENT_TYPE__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getNumber()
+ {
+ return number;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setNumber(int newNumber)
+ {
+ int oldNumber = number;
+ number = newNumber;
+ boolean oldNumberESet = numberESet;
+ numberESet = true;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.DEPARTMENT_TYPE__NUMBER, oldNumber, number, !oldNumberESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetNumber()
+ {
+ int oldNumber = number;
+ boolean oldNumberESet = numberESet;
+ number = NUMBER_EDEFAULT;
+ numberESet = false;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, CompanyPackageImpl.DEPARTMENT_TYPE__NUMBER, oldNumber, NUMBER_EDEFAULT, oldNumberESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetNumber()
+ {
+ return numberESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DEPARTMENT_TYPE__EMPLOYEES:
+ return ((InternalEList)getEmployees()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DEPARTMENT_TYPE__EMPLOYEES:
+ return getEmployees();
+ case CompanyPackageImpl.DEPARTMENT_TYPE__LOCATION:
+ return getLocation();
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NAME:
+ return getName();
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NUMBER:
+ return new Integer(getNumber());
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DEPARTMENT_TYPE__EMPLOYEES:
+ getEmployees().clear();
+ getEmployees().addAll((Collection)newValue);
+ return;
+ case CompanyPackageImpl.DEPARTMENT_TYPE__LOCATION:
+ setLocation((String)newValue);
+ return;
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NAME:
+ setName((String)newValue);
+ return;
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NUMBER:
+ setNumber(((Integer)newValue).intValue());
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DEPARTMENT_TYPE__EMPLOYEES:
+ getEmployees().clear();
+ return;
+ case CompanyPackageImpl.DEPARTMENT_TYPE__LOCATION:
+ setLocation(LOCATION_EDEFAULT);
+ return;
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NUMBER:
+ unsetNumber();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.DEPARTMENT_TYPE__EMPLOYEES:
+ return employees != null && !employees.isEmpty();
+ case CompanyPackageImpl.DEPARTMENT_TYPE__LOCATION:
+ return LOCATION_EDEFAULT == null ? location != null : !LOCATION_EDEFAULT.equals(location);
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case CompanyPackageImpl.DEPARTMENT_TYPE__NUMBER:
+ return isSetNumber();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String toString()
+ {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (location: ");
+ result.append(location);
+ result.append(", name: ");
+ result.append(name);
+ result.append(", number: ");
+ if (numberESet) result.append(number); else result.append("<unset>");
+ result.append(')');
+ return result.toString();
+ }
+
+} //DepartmentTypeImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/EmployeeTypeImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/EmployeeTypeImpl.java
new file mode 100644
index 0000000000..39d0e6b876
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/company/impl/EmployeeTypeImpl.java
@@ -0,0 +1,333 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.company.impl;
+
+import org.apache.tuscany.das.rdb.test.company.EmployeeType;
+
+import org.apache.tuscany.sdo.impl.DataObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Employee Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.EmployeeTypeImpl#isManager <em>Manager</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.EmployeeTypeImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.company.impl.EmployeeTypeImpl#getSN <em>SN</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EmployeeTypeImpl extends DataObjectImpl implements EmployeeType
+{
+ /**
+ * The default value of the '{@link #isManager() <em>Manager</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isManager()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean MANAGER_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isManager() <em>Manager</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isManager()
+ * @generated
+ * @ordered
+ */
+ protected boolean manager = MANAGER_EDEFAULT;
+
+ /**
+ * This is true if the Manager attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean managerESet = false;
+
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getSN() <em>SN</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSN()
+ * @generated
+ * @ordered
+ */
+ protected static final String SN_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getSN() <em>SN</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSN()
+ * @generated
+ * @ordered
+ */
+ protected String sN = SN_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EmployeeTypeImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EClass eStaticClass()
+ {
+ return CompanyPackageImpl.Literals.EMPLOYEE_TYPE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isManager()
+ {
+ return manager;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setManager(boolean newManager)
+ {
+ boolean oldManager = manager;
+ manager = newManager;
+ boolean oldManagerESet = managerESet;
+ managerESet = true;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.EMPLOYEE_TYPE__MANAGER, oldManager, manager, !oldManagerESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetManager()
+ {
+ boolean oldManager = manager;
+ boolean oldManagerESet = managerESet;
+ manager = MANAGER_EDEFAULT;
+ managerESet = false;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, CompanyPackageImpl.EMPLOYEE_TYPE__MANAGER, oldManager, MANAGER_EDEFAULT, oldManagerESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetManager()
+ {
+ return managerESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName)
+ {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.EMPLOYEE_TYPE__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getSN()
+ {
+ return sN;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSN(String newSN)
+ {
+ String oldSN = sN;
+ sN = newSN;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CompanyPackageImpl.EMPLOYEE_TYPE__SN, oldSN, sN));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.EMPLOYEE_TYPE__MANAGER:
+ return isManager() ? Boolean.TRUE : Boolean.FALSE;
+ case CompanyPackageImpl.EMPLOYEE_TYPE__NAME:
+ return getName();
+ case CompanyPackageImpl.EMPLOYEE_TYPE__SN:
+ return getSN();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.EMPLOYEE_TYPE__MANAGER:
+ setManager(((Boolean)newValue).booleanValue());
+ return;
+ case CompanyPackageImpl.EMPLOYEE_TYPE__NAME:
+ setName((String)newValue);
+ return;
+ case CompanyPackageImpl.EMPLOYEE_TYPE__SN:
+ setSN((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.EMPLOYEE_TYPE__MANAGER:
+ unsetManager();
+ return;
+ case CompanyPackageImpl.EMPLOYEE_TYPE__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case CompanyPackageImpl.EMPLOYEE_TYPE__SN:
+ setSN(SN_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case CompanyPackageImpl.EMPLOYEE_TYPE__MANAGER:
+ return isSetManager();
+ case CompanyPackageImpl.EMPLOYEE_TYPE__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case CompanyPackageImpl.EMPLOYEE_TYPE__SN:
+ return SN_EDEFAULT == null ? sN != null : !SN_EDEFAULT.equals(sN);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String toString()
+ {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (manager: ");
+ if (managerESet) result.append(manager); else result.append("<unset>");
+ result.append(", name: ");
+ result.append(name);
+ result.append(", sN: ");
+ result.append(sN);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EmployeeTypeImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/AnOrder.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/AnOrder.java
new file mode 100644
index 0000000000..1cbc53c1ab
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/AnOrder.java
@@ -0,0 +1,216 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>An Order</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getID <em>ID</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getProduct <em>Product</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getQuantity <em>Quantity</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getCustomerID <em>Customer ID</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public interface AnOrder
+{
+ /**
+ * Returns the value of the '<em><b>ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>ID</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>ID</em>' attribute.
+ * @see #isSetID()
+ * @see #unsetID()
+ * @see #setID(int)
+ * @generated
+ */
+ int getID();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getID <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>ID</em>' attribute.
+ * @see #isSetID()
+ * @see #unsetID()
+ * @see #getID()
+ * @generated
+ */
+ void setID(int value);
+
+ /**
+ * Unsets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getID <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isSetID()
+ * @see #getID()
+ * @see #setID(int)
+ * @generated
+ */
+ void unsetID();
+
+ /**
+ * Returns whether the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getID <em>ID</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>ID</em>' attribute is set.
+ * @see #unsetID()
+ * @see #getID()
+ * @see #setID(int)
+ * @generated
+ */
+ boolean isSetID();
+
+ /**
+ * Returns the value of the '<em><b>Product</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Product</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Product</em>' attribute.
+ * @see #setProduct(String)
+ * @generated
+ */
+ String getProduct();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getProduct <em>Product</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Product</em>' attribute.
+ * @see #getProduct()
+ * @generated
+ */
+ void setProduct(String value);
+
+ /**
+ * Returns the value of the '<em><b>Quantity</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Quantity</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Quantity</em>' attribute.
+ * @see #isSetQuantity()
+ * @see #unsetQuantity()
+ * @see #setQuantity(int)
+ * @generated
+ */
+ int getQuantity();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getQuantity <em>Quantity</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Quantity</em>' attribute.
+ * @see #isSetQuantity()
+ * @see #unsetQuantity()
+ * @see #getQuantity()
+ * @generated
+ */
+ void setQuantity(int value);
+
+ /**
+ * Unsets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getQuantity <em>Quantity</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isSetQuantity()
+ * @see #getQuantity()
+ * @see #setQuantity(int)
+ * @generated
+ */
+ void unsetQuantity();
+
+ /**
+ * Returns whether the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getQuantity <em>Quantity</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>Quantity</em>' attribute is set.
+ * @see #unsetQuantity()
+ * @see #getQuantity()
+ * @see #setQuantity(int)
+ * @generated
+ */
+ boolean isSetQuantity();
+
+ /**
+ * Returns the value of the '<em><b>Customer ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Customer ID</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Customer ID</em>' attribute.
+ * @see #isSetCustomerID()
+ * @see #unsetCustomerID()
+ * @see #setCustomerID(int)
+ * @generated
+ */
+ int getCustomerID();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getCustomerID <em>Customer ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Customer ID</em>' attribute.
+ * @see #isSetCustomerID()
+ * @see #unsetCustomerID()
+ * @see #getCustomerID()
+ * @generated
+ */
+ void setCustomerID(int value);
+
+ /**
+ * Unsets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getCustomerID <em>Customer ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isSetCustomerID()
+ * @see #getCustomerID()
+ * @see #setCustomerID(int)
+ * @generated
+ */
+ void unsetCustomerID();
+
+ /**
+ * Returns whether the value of the '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getCustomerID <em>Customer ID</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>Customer ID</em>' attribute is set.
+ * @see #unsetCustomerID()
+ * @see #getCustomerID()
+ * @see #setCustomerID(int)
+ * @generated
+ */
+ boolean isSetCustomerID();
+
+} // AnOrder
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/Customer.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/Customer.java
new file mode 100644
index 0000000000..5f6e71f153
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/Customer.java
@@ -0,0 +1,153 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer;
+
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Customer</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.Customer#getID <em>ID</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.Customer#getLastName <em>Last Name</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.Customer#getAddress <em>Address</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.Customer#getOrders <em>Orders</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public interface Customer
+{
+ /**
+ * Returns the value of the '<em><b>ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>ID</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>ID</em>' attribute.
+ * @see #isSetID()
+ * @see #unsetID()
+ * @see #setID(int)
+ * @generated
+ */
+ int getID();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getID <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>ID</em>' attribute.
+ * @see #isSetID()
+ * @see #unsetID()
+ * @see #getID()
+ * @generated
+ */
+ void setID(int value);
+
+ /**
+ * Unsets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getID <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isSetID()
+ * @see #getID()
+ * @see #setID(int)
+ * @generated
+ */
+ void unsetID();
+
+ /**
+ * Returns whether the value of the '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getID <em>ID</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>ID</em>' attribute is set.
+ * @see #unsetID()
+ * @see #getID()
+ * @see #setID(int)
+ * @generated
+ */
+ boolean isSetID();
+
+ /**
+ * Returns the value of the '<em><b>Last Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Last Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Last Name</em>' attribute.
+ * @see #setLastName(String)
+ * @generated
+ */
+ String getLastName();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getLastName <em>Last Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Last Name</em>' attribute.
+ * @see #getLastName()
+ * @generated
+ */
+ void setLastName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Address</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Address</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Address</em>' attribute.
+ * @see #setAddress(String)
+ * @generated
+ */
+ String getAddress();
+
+ /**
+ * Sets the value of the '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getAddress <em>Address</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Address</em>' attribute.
+ * @see #getAddress()
+ * @generated
+ */
+ void setAddress(String value);
+
+ /**
+ * Returns the value of the '<em><b>Orders</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.customer.AnOrder}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Orders</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Orders</em>' containment reference list.
+ * @generated
+ */
+ List getOrders();
+
+} // Customer
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/CustomerFactory.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/CustomerFactory.java
new file mode 100644
index 0000000000..67f8c2eca6
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/CustomerFactory.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public interface CustomerFactory
+{
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ CustomerFactory INSTANCE = org.apache.tuscany.das.rdb.test.customer.impl.CustomerFactoryImpl.eINSTANCE;
+
+ /**
+ * Returns a new object of class '<em>An Order</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>An Order</em>'.
+ * @generated
+ */
+ AnOrder createAnOrder();
+
+ /**
+ * Returns a new object of class '<em>Customer</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Customer</em>'.
+ * @generated
+ */
+ Customer createCustomer();
+
+ /**
+ * Returns a new object of class '<em>Data Graph Root</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Data Graph Root</em>'.
+ * @generated
+ */
+ DataGraphRoot createDataGraphRoot();
+
+} //CustomerFactory
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/DataGraphRoot.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/DataGraphRoot.java
new file mode 100644
index 0000000000..eeb9d8a9bb
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/DataGraphRoot.java
@@ -0,0 +1,66 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer;
+
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Data Graph Root</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.DataGraphRoot#getCustomers <em>Customers</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.DataGraphRoot#getOrders <em>Orders</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public interface DataGraphRoot
+{
+ /**
+ * Returns the value of the '<em><b>Customers</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.customer.Customer}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Customers</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Customers</em>' containment reference list.
+ * @generated
+ */
+ List getCustomers();
+
+ /**
+ * Returns the value of the '<em><b>Orders</b></em>' containment reference list.
+ * The list contents are of type {@link org.apache.tuscany.das.rdb.test.customer.AnOrder}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Orders</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Orders</em>' containment reference list.
+ * @generated
+ */
+ List getOrders();
+
+} // DataGraphRoot
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/AnOrderImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/AnOrderImpl.java
new file mode 100644
index 0000000000..c4117be1c7
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/AnOrderImpl.java
@@ -0,0 +1,461 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer.impl;
+
+import org.apache.tuscany.das.rdb.test.customer.AnOrder;
+
+import org.apache.tuscany.sdo.impl.DataObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>An Order</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl#getID <em>ID</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl#getProduct <em>Product</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl#getQuantity <em>Quantity</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl#getCustomerID <em>Customer ID</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AnOrderImpl extends DataObjectImpl implements AnOrder
+{
+ /**
+ * The default value of the '{@link #getID() <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getID()
+ * @generated
+ * @ordered
+ */
+ protected static final int ID_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getID() <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getID()
+ * @generated
+ * @ordered
+ */
+ protected int iD = ID_EDEFAULT;
+
+ /**
+ * This is true if the ID attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean iDESet = false;
+
+ /**
+ * The default value of the '{@link #getProduct() <em>Product</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProduct()
+ * @generated
+ * @ordered
+ */
+ protected static final String PRODUCT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getProduct() <em>Product</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProduct()
+ * @generated
+ * @ordered
+ */
+ protected String product = PRODUCT_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getQuantity() <em>Quantity</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getQuantity()
+ * @generated
+ * @ordered
+ */
+ protected static final int QUANTITY_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getQuantity() <em>Quantity</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getQuantity()
+ * @generated
+ * @ordered
+ */
+ protected int quantity = QUANTITY_EDEFAULT;
+
+ /**
+ * This is true if the Quantity attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean quantityESet = false;
+
+ /**
+ * The default value of the '{@link #getCustomerID() <em>Customer ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCustomerID()
+ * @generated
+ * @ordered
+ */
+ protected static final int CUSTOMER_ID_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getCustomerID() <em>Customer ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCustomerID()
+ * @generated
+ * @ordered
+ */
+ protected int customerID = CUSTOMER_ID_EDEFAULT;
+
+ /**
+ * This is true if the Customer ID attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean customerIDESet = false;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AnOrderImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EClass eStaticClass()
+ {
+ return CustomerPackageImpl.Literals.AN_ORDER;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getID()
+ {
+ return iD;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setID(int newID)
+ {
+ int oldID = iD;
+ iD = newID;
+ boolean oldIDESet = iDESet;
+ iDESet = true;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CustomerPackageImpl.AN_ORDER__ID, oldID, iD, !oldIDESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetID()
+ {
+ int oldID = iD;
+ boolean oldIDESet = iDESet;
+ iD = ID_EDEFAULT;
+ iDESet = false;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, CustomerPackageImpl.AN_ORDER__ID, oldID, ID_EDEFAULT, oldIDESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetID()
+ {
+ return iDESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getProduct()
+ {
+ return product;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setProduct(String newProduct)
+ {
+ String oldProduct = product;
+ product = newProduct;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CustomerPackageImpl.AN_ORDER__PRODUCT, oldProduct, product));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getQuantity()
+ {
+ return quantity;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setQuantity(int newQuantity)
+ {
+ int oldQuantity = quantity;
+ quantity = newQuantity;
+ boolean oldQuantityESet = quantityESet;
+ quantityESet = true;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CustomerPackageImpl.AN_ORDER__QUANTITY, oldQuantity, quantity, !oldQuantityESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetQuantity()
+ {
+ int oldQuantity = quantity;
+ boolean oldQuantityESet = quantityESet;
+ quantity = QUANTITY_EDEFAULT;
+ quantityESet = false;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, CustomerPackageImpl.AN_ORDER__QUANTITY, oldQuantity, QUANTITY_EDEFAULT, oldQuantityESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetQuantity()
+ {
+ return quantityESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getCustomerID()
+ {
+ return customerID;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCustomerID(int newCustomerID)
+ {
+ int oldCustomerID = customerID;
+ customerID = newCustomerID;
+ boolean oldCustomerIDESet = customerIDESet;
+ customerIDESet = true;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CustomerPackageImpl.AN_ORDER__CUSTOMER_ID, oldCustomerID, customerID, !oldCustomerIDESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetCustomerID()
+ {
+ int oldCustomerID = customerID;
+ boolean oldCustomerIDESet = customerIDESet;
+ customerID = CUSTOMER_ID_EDEFAULT;
+ customerIDESet = false;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, CustomerPackageImpl.AN_ORDER__CUSTOMER_ID, oldCustomerID, CUSTOMER_ID_EDEFAULT, oldCustomerIDESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetCustomerID()
+ {
+ return customerIDESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.AN_ORDER__ID:
+ return new Integer(getID());
+ case CustomerPackageImpl.AN_ORDER__PRODUCT:
+ return getProduct();
+ case CustomerPackageImpl.AN_ORDER__QUANTITY:
+ return new Integer(getQuantity());
+ case CustomerPackageImpl.AN_ORDER__CUSTOMER_ID:
+ return new Integer(getCustomerID());
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.AN_ORDER__ID:
+ setID(((Integer)newValue).intValue());
+ return;
+ case CustomerPackageImpl.AN_ORDER__PRODUCT:
+ setProduct((String)newValue);
+ return;
+ case CustomerPackageImpl.AN_ORDER__QUANTITY:
+ setQuantity(((Integer)newValue).intValue());
+ return;
+ case CustomerPackageImpl.AN_ORDER__CUSTOMER_ID:
+ setCustomerID(((Integer)newValue).intValue());
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.AN_ORDER__ID:
+ unsetID();
+ return;
+ case CustomerPackageImpl.AN_ORDER__PRODUCT:
+ setProduct(PRODUCT_EDEFAULT);
+ return;
+ case CustomerPackageImpl.AN_ORDER__QUANTITY:
+ unsetQuantity();
+ return;
+ case CustomerPackageImpl.AN_ORDER__CUSTOMER_ID:
+ unsetCustomerID();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.AN_ORDER__ID:
+ return isSetID();
+ case CustomerPackageImpl.AN_ORDER__PRODUCT:
+ return PRODUCT_EDEFAULT == null ? product != null : !PRODUCT_EDEFAULT.equals(product);
+ case CustomerPackageImpl.AN_ORDER__QUANTITY:
+ return isSetQuantity();
+ case CustomerPackageImpl.AN_ORDER__CUSTOMER_ID:
+ return isSetCustomerID();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String toString()
+ {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (iD: ");
+ if (iDESet) result.append(iD); else result.append("<unset>");
+ result.append(", product: ");
+ result.append(product);
+ result.append(", quantity: ");
+ if (quantityESet) result.append(quantity); else result.append("<unset>");
+ result.append(", customerID: ");
+ if (customerIDESet) result.append(customerID); else result.append("<unset>");
+ result.append(')');
+ return result.toString();
+ }
+
+} //AnOrderImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerFactoryImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerFactoryImpl.java
new file mode 100644
index 0000000000..00b1ede09c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerFactoryImpl.java
@@ -0,0 +1,150 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer.impl;
+
+import org.apache.tuscany.das.rdb.test.customer.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CustomerFactoryImpl extends EFactoryImpl implements CustomerFactory
+{
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final CustomerFactoryImpl eINSTANCE = init();
+
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static CustomerFactoryImpl init()
+ {
+ try
+ {
+ CustomerFactoryImpl theCustomerFactory = (CustomerFactoryImpl)EPackage.Registry.INSTANCE.getEFactory("http:///org.apache.tuscany.das.rdb.test/customer.xsd");
+ if (theCustomerFactory != null)
+ {
+ return theCustomerFactory;
+ }
+ }
+ catch (Exception exception)
+ {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new CustomerFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CustomerFactoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EObject create(EClass eClass)
+ {
+ switch (eClass.getClassifierID())
+ {
+ case CustomerPackageImpl.AN_ORDER: return (EObject)createAnOrder();
+ case CustomerPackageImpl.CUSTOMER: return (EObject)createCustomer();
+ case CustomerPackageImpl.DATA_GRAPH_ROOT: return (EObject)createDataGraphRoot();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AnOrder createAnOrder()
+ {
+ AnOrderImpl anOrder = new AnOrderImpl();
+ return anOrder;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Customer createCustomer()
+ {
+ CustomerImpl customer = new CustomerImpl();
+ return customer;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public DataGraphRoot createDataGraphRoot()
+ {
+ DataGraphRootImpl dataGraphRoot = new DataGraphRootImpl();
+ return dataGraphRoot;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CustomerPackageImpl getCustomerPackageImpl()
+ {
+ return (CustomerPackageImpl)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ public static CustomerPackageImpl getPackage()
+ {
+ return CustomerPackageImpl.eINSTANCE;
+ }
+
+} //CustomerFactoryImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerImpl.java
new file mode 100644
index 0000000000..02be07ac41
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerImpl.java
@@ -0,0 +1,395 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.test.customer.AnOrder;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+
+import org.apache.tuscany.sdo.impl.DataObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Customer</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl#getID <em>ID</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl#getLastName <em>Last Name</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl#getAddress <em>Address</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl#getOrders <em>Orders</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CustomerImpl extends DataObjectImpl implements Customer
+{
+ /**
+ * The default value of the '{@link #getID() <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getID()
+ * @generated
+ * @ordered
+ */
+ protected static final int ID_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getID() <em>ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getID()
+ * @generated
+ * @ordered
+ */
+ protected int iD = ID_EDEFAULT;
+
+ /**
+ * This is true if the ID attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected boolean iDESet = false;
+
+ /**
+ * The default value of the '{@link #getLastName() <em>Last Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLastName()
+ * @generated
+ * @ordered
+ */
+ protected static final String LAST_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLastName() <em>Last Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLastName()
+ * @generated
+ * @ordered
+ */
+ protected String lastName = LAST_NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getAddress() <em>Address</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAddress()
+ * @generated
+ * @ordered
+ */
+ protected static final String ADDRESS_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getAddress() <em>Address</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAddress()
+ * @generated
+ * @ordered
+ */
+ protected String address = ADDRESS_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getOrders() <em>Orders</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOrders()
+ * @generated
+ * @ordered
+ */
+ protected EList orders = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected CustomerImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EClass eStaticClass()
+ {
+ return CustomerPackageImpl.Literals.CUSTOMER;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getID()
+ {
+ return iD;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setID(int newID)
+ {
+ int oldID = iD;
+ iD = newID;
+ boolean oldIDESet = iDESet;
+ iDESet = true;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CustomerPackageImpl.CUSTOMER__ID, oldID, iD, !oldIDESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetID()
+ {
+ int oldID = iD;
+ boolean oldIDESet = iDESet;
+ iD = ID_EDEFAULT;
+ iDESet = false;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, CustomerPackageImpl.CUSTOMER__ID, oldID, ID_EDEFAULT, oldIDESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetID()
+ {
+ return iDESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getLastName()
+ {
+ return lastName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setLastName(String newLastName)
+ {
+ String oldLastName = lastName;
+ lastName = newLastName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CustomerPackageImpl.CUSTOMER__LAST_NAME, oldLastName, lastName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getAddress()
+ {
+ return address;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setAddress(String newAddress)
+ {
+ String oldAddress = address;
+ address = newAddress;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CustomerPackageImpl.CUSTOMER__ADDRESS, oldAddress, address));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getOrders()
+ {
+ if (orders == null)
+ {
+ orders = new EObjectContainmentEList(AnOrder.class, this, CustomerPackageImpl.CUSTOMER__ORDERS);
+ }
+ return orders;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.CUSTOMER__ORDERS:
+ return ((InternalEList)getOrders()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.CUSTOMER__ID:
+ return new Integer(getID());
+ case CustomerPackageImpl.CUSTOMER__LAST_NAME:
+ return getLastName();
+ case CustomerPackageImpl.CUSTOMER__ADDRESS:
+ return getAddress();
+ case CustomerPackageImpl.CUSTOMER__ORDERS:
+ return getOrders();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.CUSTOMER__ID:
+ setID(((Integer)newValue).intValue());
+ return;
+ case CustomerPackageImpl.CUSTOMER__LAST_NAME:
+ setLastName((String)newValue);
+ return;
+ case CustomerPackageImpl.CUSTOMER__ADDRESS:
+ setAddress((String)newValue);
+ return;
+ case CustomerPackageImpl.CUSTOMER__ORDERS:
+ getOrders().clear();
+ getOrders().addAll((Collection)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.CUSTOMER__ID:
+ unsetID();
+ return;
+ case CustomerPackageImpl.CUSTOMER__LAST_NAME:
+ setLastName(LAST_NAME_EDEFAULT);
+ return;
+ case CustomerPackageImpl.CUSTOMER__ADDRESS:
+ setAddress(ADDRESS_EDEFAULT);
+ return;
+ case CustomerPackageImpl.CUSTOMER__ORDERS:
+ getOrders().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.CUSTOMER__ID:
+ return isSetID();
+ case CustomerPackageImpl.CUSTOMER__LAST_NAME:
+ return LAST_NAME_EDEFAULT == null ? lastName != null : !LAST_NAME_EDEFAULT.equals(lastName);
+ case CustomerPackageImpl.CUSTOMER__ADDRESS:
+ return ADDRESS_EDEFAULT == null ? address != null : !ADDRESS_EDEFAULT.equals(address);
+ case CustomerPackageImpl.CUSTOMER__ORDERS:
+ return orders != null && !orders.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String toString()
+ {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (iD: ");
+ if (iDESet) result.append(iD); else result.append("<unset>");
+ result.append(", lastName: ");
+ result.append(lastName);
+ result.append(", address: ");
+ result.append(address);
+ result.append(')');
+ return result.toString();
+ }
+
+} //CustomerImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerPackageImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerPackageImpl.java
new file mode 100644
index 0000000000..ca33c06814
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/CustomerPackageImpl.java
@@ -0,0 +1,847 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer.impl;
+
+import org.apache.tuscany.das.rdb.test.customer.AnOrder;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.customer.DataGraphRoot;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.customer.CustomerFactory
+ * @generated
+ */
+public class CustomerPackageImpl extends EPackageImpl
+{
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String eNAME = "customer";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String eNS_URI = "http:///org.apache.tuscany.das.rdb.test/customer.xsd";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String eNS_PREFIX = "customer";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final CustomerPackageImpl eINSTANCE = org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl <em>An Order</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl#getAnOrder()
+ * @generated
+ */
+ public static final int AN_ORDER = 0;
+
+ /**
+ * The feature id for the '<em><b>ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int AN_ORDER__ID = 0;
+
+ /**
+ * The feature id for the '<em><b>Product</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int AN_ORDER__PRODUCT = 1;
+
+ /**
+ * The feature id for the '<em><b>Quantity</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int AN_ORDER__QUANTITY = 2;
+
+ /**
+ * The feature id for the '<em><b>Customer ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int AN_ORDER__CUSTOMER_ID = 3;
+
+ /**
+ * The number of structural features of the '<em>An Order</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int AN_ORDER_FEATURE_COUNT = 4;
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl <em>Customer</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl#getCustomer()
+ * @generated
+ */
+ public static final int CUSTOMER = 1;
+
+ /**
+ * The feature id for the '<em><b>ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int CUSTOMER__ID = 0;
+
+ /**
+ * The feature id for the '<em><b>Last Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int CUSTOMER__LAST_NAME = 1;
+
+ /**
+ * The feature id for the '<em><b>Address</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int CUSTOMER__ADDRESS = 2;
+
+ /**
+ * The feature id for the '<em><b>Orders</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int CUSTOMER__ORDERS = 3;
+
+ /**
+ * The number of structural features of the '<em>Customer</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int CUSTOMER_FEATURE_COUNT = 4;
+
+ /**
+ * The meta object id for the '{@link org.apache.tuscany.das.rdb.test.customer.impl.DataGraphRootImpl <em>Data Graph Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.DataGraphRootImpl
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl#getDataGraphRoot()
+ * @generated
+ */
+ public static final int DATA_GRAPH_ROOT = 2;
+
+ /**
+ * The feature id for the '<em><b>Customers</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DATA_GRAPH_ROOT__CUSTOMERS = 0;
+
+ /**
+ * The feature id for the '<em><b>Orders</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DATA_GRAPH_ROOT__ORDERS = 1;
+
+ /**
+ * The number of structural features of the '<em>Data Graph Root</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ public static final int DATA_GRAPH_ROOT_FEATURE_COUNT = 2;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass anOrderEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass customerEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass dataGraphRootEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private CustomerPackageImpl()
+ {
+ super(eNS_URI, ((EFactory)CustomerFactory.INSTANCE));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this
+ * model, and for any others upon which it depends. Simple
+ * dependencies are satisfied by calling this method on all
+ * dependent packages before doing anything else. This method drives
+ * initialization for interdependent packages directly, in parallel
+ * with this package, itself.
+ * <p>Of this package and its interdependencies, all packages which
+ * have not yet been registered by their URI values are first created
+ * and registered. The packages are then initialized in two steps:
+ * meta-model objects for all of the packages are created before any
+ * are initialized, since one package's meta-model objects may refer to
+ * those of another.
+ * <p>Invocation of this method will not affect any packages that have
+ * already been initialized.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static CustomerPackageImpl init()
+ {
+ if (isInited) return (CustomerPackageImpl)EPackage.Registry.INSTANCE.getEPackage(CustomerPackageImpl.eNS_URI);
+
+ // Obtain or create and register package
+ CustomerPackageImpl theCustomerPackageImpl = (CustomerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof CustomerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new CustomerPackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ XMLTypePackage.eINSTANCE.eClass();
+
+ // Create package meta-data objects
+ theCustomerPackageImpl.createPackageContents();
+
+ // Initialize created meta-data
+ theCustomerPackageImpl.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theCustomerPackageImpl.freeze();
+
+ return theCustomerPackageImpl;
+ }
+
+
+ /**
+ * Returns the meta object for class '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder <em>An Order</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>An Order</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.AnOrder
+ * @generated
+ */
+ public EClass getAnOrder()
+ {
+ return anOrderEClass;
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getID <em>ID</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>ID</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.AnOrder#getID()
+ * @see #getAnOrder()
+ * @generated
+ */
+ public EAttribute getAnOrder_ID()
+ {
+ return (EAttribute)anOrderEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getProduct <em>Product</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Product</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.AnOrder#getProduct()
+ * @see #getAnOrder()
+ * @generated
+ */
+ public EAttribute getAnOrder_Product()
+ {
+ return (EAttribute)anOrderEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getQuantity <em>Quantity</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Quantity</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.AnOrder#getQuantity()
+ * @see #getAnOrder()
+ * @generated
+ */
+ public EAttribute getAnOrder_Quantity()
+ {
+ return (EAttribute)anOrderEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.customer.AnOrder#getCustomerID <em>Customer ID</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Customer ID</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.AnOrder#getCustomerID()
+ * @see #getAnOrder()
+ * @generated
+ */
+ public EAttribute getAnOrder_CustomerID()
+ {
+ return (EAttribute)anOrderEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * Returns the meta object for class '{@link org.apache.tuscany.das.rdb.test.customer.Customer <em>Customer</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Customer</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.Customer
+ * @generated
+ */
+ public EClass getCustomer()
+ {
+ return customerEClass;
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getID <em>ID</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>ID</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.Customer#getID()
+ * @see #getCustomer()
+ * @generated
+ */
+ public EAttribute getCustomer_ID()
+ {
+ return (EAttribute)customerEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getLastName <em>Last Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Last Name</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.Customer#getLastName()
+ * @see #getCustomer()
+ * @generated
+ */
+ public EAttribute getCustomer_LastName()
+ {
+ return (EAttribute)customerEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the meta object for the attribute '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getAddress <em>Address</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Address</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.Customer#getAddress()
+ * @see #getCustomer()
+ * @generated
+ */
+ public EAttribute getCustomer_Address()
+ {
+ return (EAttribute)customerEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.customer.Customer#getOrders <em>Orders</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Orders</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.Customer#getOrders()
+ * @see #getCustomer()
+ * @generated
+ */
+ public EReference getCustomer_Orders()
+ {
+ return (EReference)customerEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * Returns the meta object for class '{@link org.apache.tuscany.das.rdb.test.customer.DataGraphRoot <em>Data Graph Root</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Data Graph Root</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.DataGraphRoot
+ * @generated
+ */
+ public EClass getDataGraphRoot()
+ {
+ return dataGraphRootEClass;
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.customer.DataGraphRoot#getCustomers <em>Customers</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Customers</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.DataGraphRoot#getCustomers()
+ * @see #getDataGraphRoot()
+ * @generated
+ */
+ public EReference getDataGraphRoot_Customers()
+ {
+ return (EReference)dataGraphRootEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.apache.tuscany.das.rdb.test.customer.DataGraphRoot#getOrders <em>Orders</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Orders</em>'.
+ * @see org.apache.tuscany.das.rdb.test.customer.DataGraphRoot#getOrders()
+ * @see #getDataGraphRoot()
+ * @generated
+ */
+ public EReference getDataGraphRoot_Orders()
+ {
+ return (EReference)dataGraphRootEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ public CustomerFactory getCustomerFactory()
+ {
+ return (CustomerFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents()
+ {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ anOrderEClass = createEClass(AN_ORDER);
+ createEAttribute(anOrderEClass, AN_ORDER__ID);
+ createEAttribute(anOrderEClass, AN_ORDER__PRODUCT);
+ createEAttribute(anOrderEClass, AN_ORDER__QUANTITY);
+ createEAttribute(anOrderEClass, AN_ORDER__CUSTOMER_ID);
+
+ customerEClass = createEClass(CUSTOMER);
+ createEAttribute(customerEClass, CUSTOMER__ID);
+ createEAttribute(customerEClass, CUSTOMER__LAST_NAME);
+ createEAttribute(customerEClass, CUSTOMER__ADDRESS);
+ createEReference(customerEClass, CUSTOMER__ORDERS);
+
+ dataGraphRootEClass = createEClass(DATA_GRAPH_ROOT);
+ createEReference(dataGraphRootEClass, DATA_GRAPH_ROOT__CUSTOMERS);
+ createEReference(dataGraphRootEClass, DATA_GRAPH_ROOT__ORDERS);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents()
+ {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ XMLTypePackage theXMLTypePackage = (XMLTypePackage)EPackage.Registry.INSTANCE.getEPackage(XMLTypePackage.eNS_URI);
+
+ // Add supertypes to classes
+
+ // Initialize classes and features; add operations and parameters
+ initEClass(anOrderEClass, AnOrder.class, "AnOrder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getAnOrder_ID(), theXMLTypePackage.getInt(), "iD", null, 1, 1, AnOrder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getAnOrder_Product(), theXMLTypePackage.getString(), "product", null, 1, 1, AnOrder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getAnOrder_Quantity(), theXMLTypePackage.getInt(), "quantity", null, 1, 1, AnOrder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getAnOrder_CustomerID(), theXMLTypePackage.getInt(), "customerID", null, 1, 1, AnOrder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(customerEClass, Customer.class, "Customer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getCustomer_ID(), theXMLTypePackage.getInt(), "iD", null, 1, 1, Customer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getCustomer_LastName(), theXMLTypePackage.getString(), "lastName", null, 1, 1, Customer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getCustomer_Address(), theXMLTypePackage.getString(), "address", null, 1, 1, Customer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getCustomer_Orders(), this.getAnOrder(), null, "orders", null, 1, -1, Customer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(dataGraphRootEClass, DataGraphRoot.class, "DataGraphRoot", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getDataGraphRoot_Customers(), this.getCustomer(), null, "customers", null, 0, -1, DataGraphRoot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getDataGraphRoot_Orders(), this.getAnOrder(), null, "orders", null, 0, -1, DataGraphRoot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+
+ // Create annotations
+ // http:///org/eclipse/emf/ecore/util/ExtendedMetaData
+ createExtendedMetaDataAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void createExtendedMetaDataAnnotations()
+ {
+ String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";
+ addAnnotation
+ (anOrderEClass,
+ source,
+ new String[]
+ {
+ "name", "AnOrder",
+ "kind", "elementOnly"
+ });
+ addAnnotation
+ (getAnOrder_ID(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "ID"
+ });
+ addAnnotation
+ (getAnOrder_Product(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "Product"
+ });
+ addAnnotation
+ (getAnOrder_Quantity(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "Quantity"
+ });
+ addAnnotation
+ (getAnOrder_CustomerID(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "Customer_ID"
+ });
+ addAnnotation
+ (customerEClass,
+ source,
+ new String[]
+ {
+ "name", "Customer",
+ "kind", "elementOnly"
+ });
+ addAnnotation
+ (getCustomer_ID(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "ID"
+ });
+ addAnnotation
+ (getCustomer_LastName(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "lastName"
+ });
+ addAnnotation
+ (getCustomer_Address(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "address"
+ });
+ addAnnotation
+ (getCustomer_Orders(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "orders"
+ });
+ addAnnotation
+ (dataGraphRootEClass,
+ source,
+ new String[]
+ {
+ "name", "DataGraphRoot",
+ "kind", "elementOnly"
+ });
+ addAnnotation
+ (getDataGraphRoot_Customers(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "customers"
+ });
+ addAnnotation
+ (getDataGraphRoot_Orders(),
+ source,
+ new String[]
+ {
+ "kind", "element",
+ "name", "orders"
+ });
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public interface Literals
+ {
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl <em>An Order</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.AnOrderImpl
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl#getAnOrder()
+ * @generated
+ */
+ public static final EClass AN_ORDER = eINSTANCE.getAnOrder();
+
+ /**
+ * The meta object literal for the '<em><b>ID</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute AN_ORDER__ID = eINSTANCE.getAnOrder_ID();
+
+ /**
+ * The meta object literal for the '<em><b>Product</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute AN_ORDER__PRODUCT = eINSTANCE.getAnOrder_Product();
+
+ /**
+ * The meta object literal for the '<em><b>Quantity</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute AN_ORDER__QUANTITY = eINSTANCE.getAnOrder_Quantity();
+
+ /**
+ * The meta object literal for the '<em><b>Customer ID</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute AN_ORDER__CUSTOMER_ID = eINSTANCE.getAnOrder_CustomerID();
+
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl <em>Customer</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerImpl
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl#getCustomer()
+ * @generated
+ */
+ public static final EClass CUSTOMER = eINSTANCE.getCustomer();
+
+ /**
+ * The meta object literal for the '<em><b>ID</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute CUSTOMER__ID = eINSTANCE.getCustomer_ID();
+
+ /**
+ * The meta object literal for the '<em><b>Last Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute CUSTOMER__LAST_NAME = eINSTANCE.getCustomer_LastName();
+
+ /**
+ * The meta object literal for the '<em><b>Address</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EAttribute CUSTOMER__ADDRESS = eINSTANCE.getCustomer_Address();
+
+ /**
+ * The meta object literal for the '<em><b>Orders</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference CUSTOMER__ORDERS = eINSTANCE.getCustomer_Orders();
+
+ /**
+ * The meta object literal for the '{@link org.apache.tuscany.das.rdb.test.customer.impl.DataGraphRootImpl <em>Data Graph Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.DataGraphRootImpl
+ * @see org.apache.tuscany.das.rdb.test.customer.impl.CustomerPackageImpl#getDataGraphRoot()
+ * @generated
+ */
+ public static final EClass DATA_GRAPH_ROOT = eINSTANCE.getDataGraphRoot();
+
+ /**
+ * The meta object literal for the '<em><b>Customers</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DATA_GRAPH_ROOT__CUSTOMERS = eINSTANCE.getDataGraphRoot_Customers();
+
+ /**
+ * The meta object literal for the '<em><b>Orders</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EReference DATA_GRAPH_ROOT__ORDERS = eINSTANCE.getDataGraphRoot_Orders();
+
+ }
+
+} //CustomerPackageImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/DataGraphRootImpl.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/DataGraphRootImpl.java
new file mode 100644
index 0000000000..30fc8181a2
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/customer/impl/DataGraphRootImpl.java
@@ -0,0 +1,213 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.customer.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.test.customer.AnOrder;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.customer.DataGraphRoot;
+
+import org.apache.tuscany.sdo.impl.DataObjectImpl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Data Graph Root</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.DataGraphRootImpl#getCustomers <em>Customers</em>}</li>
+ * <li>{@link org.apache.tuscany.das.rdb.test.customer.impl.DataGraphRootImpl#getOrders <em>Orders</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DataGraphRootImpl extends DataObjectImpl implements DataGraphRoot
+{
+ /**
+ * The cached value of the '{@link #getCustomers() <em>Customers</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCustomers()
+ * @generated
+ * @ordered
+ */
+ protected EList customers = null;
+
+ /**
+ * The cached value of the '{@link #getOrders() <em>Orders</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOrders()
+ * @generated
+ * @ordered
+ */
+ protected EList orders = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DataGraphRootImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EClass eStaticClass()
+ {
+ return CustomerPackageImpl.Literals.DATA_GRAPH_ROOT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getCustomers()
+ {
+ if (customers == null)
+ {
+ customers = new EObjectContainmentEList(Customer.class, this, CustomerPackageImpl.DATA_GRAPH_ROOT__CUSTOMERS);
+ }
+ return customers;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List getOrders()
+ {
+ if (orders == null)
+ {
+ orders = new EObjectContainmentEList(AnOrder.class, this, CustomerPackageImpl.DATA_GRAPH_ROOT__ORDERS);
+ }
+ return orders;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__CUSTOMERS:
+ return ((InternalEList)getCustomers()).basicRemove(otherEnd, msgs);
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__ORDERS:
+ return ((InternalEList)getOrders()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__CUSTOMERS:
+ return getCustomers();
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__ORDERS:
+ return getOrders();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__CUSTOMERS:
+ getCustomers().clear();
+ getCustomers().addAll((Collection)newValue);
+ return;
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__ORDERS:
+ getOrders().clear();
+ getOrders().addAll((Collection)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__CUSTOMERS:
+ getCustomers().clear();
+ return;
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__ORDERS:
+ getOrders().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__CUSTOMERS:
+ return customers != null && !customers.isEmpty();
+ case CustomerPackageImpl.DATA_GRAPH_ROOT__ORDERS:
+ return orders != null && !orders.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //DataGraphRootImpl
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java
new file mode 100644
index 0000000000..e696c8dd6b
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java
@@ -0,0 +1,45 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+
+public class BookData extends TestDataWithExplicitColumns {
+
+ //CREATE TABLE BOOK (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), AUTHOR VARCHAR(30), QUANTITY INT, OCC INTEGER)
+
+ private static int[] bookTypes = {Types.INTEGER, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER};
+
+ private static Object[][] bookData = {
+ { new Integer(1), "The Brothers Karamazov", "Fyodor Dostoevsky", new Integer(5), new Integer(17) },
+ { new Integer(2), "Cat in the Hat", "Doctor Seuss", new Integer(10), new Integer(1) }};
+
+ private static String[] bookColumns = { "BOOK_ID", "NAME", "AUTHOR", "QUANTITY", "OCC"};
+
+ public BookData(Connection connection) {
+ super(connection, bookData, bookColumns, bookTypes);
+ }
+
+ public String getTableName() {
+ return "BOOK";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java
new file mode 100644
index 0000000000..0ebbd6c5af
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java
@@ -0,0 +1,54 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+
+public class CityData extends TestData {
+
+ private static Object[][] cityData = {
+ {new Integer(1), "Lizard Lick", "1"},
+ {new Integer(2), "Morrisville", "1"},
+ {new Integer(3), "Breckenridge", "2"},
+ {new Integer(4), "Barstow", "3"},
+ {new Integer(5), "Sacramento", "3"}
+
+ };
+
+ public CityData(Connection c) {
+ super(c, cityData);
+ }
+
+ public String getTableName() {
+ return "CITIES";
+ }
+
+ public void doDeletes() throws SQLException {
+ deleteRowsFromTable();
+
+ }
+
+ public void doInserts() throws SQLException {
+ insertRows();
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java
new file mode 100644
index 0000000000..9c49004ba5
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java
@@ -0,0 +1,45 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+
+public class CompanyData extends TestDataWithExplicitColumns {
+
+ //CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY ,NAME VARCHAR(30))
+
+ private static int[] columnTypes = {Types.VARCHAR};
+
+ private static Object[][] companyData = { { "ACME Publishing" },
+ { "Do-rite plumbing" },
+ { "MegaCorp" } };
+
+ private static String[] companyColumns = { "NAME" };
+
+ public CompanyData(Connection connection) {
+ super(connection, companyData, companyColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "COMPANY";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java
new file mode 100644
index 0000000000..66d0c25369
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java
@@ -0,0 +1,42 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.test.framework.RelationshipData;
+
+
+public class CompanyDeptData extends RelationshipData {
+
+ public static Object[][] data = {
+ {"MegaCorp", "Advanced Technologies"}
+ };
+
+ public CompanyDeptData(Connection c) {
+ super(c, data);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select id from company where name = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update department set companyid = ? where department.name = ?";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java
new file mode 100644
index 0000000000..300bf57260
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java
@@ -0,0 +1,44 @@
+
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.test.framework.RelationshipData;
+
+
+public class CompanyEmpData extends RelationshipData {
+
+ public static Object[][] data = {
+ {"Mary Smith", "ACME Publishing" },
+ {"Jane Doe", "Do-rite plumbing"},
+ {"Al Smith", "MegaCorp"}};
+
+ public CompanyEmpData(Connection c) {
+ super(c, data);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select employee.id from employee where employee.name = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update company set company.eotmid = ? where company.name = ?";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java
new file mode 100644
index 0000000000..149bcfc71b
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java
@@ -0,0 +1,45 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+
+public class CustomerData extends TestData {
+
+ private static Object[][] customerData = {
+ {new Integer(1), "Williams", "1212 foobar lane"},
+ {new Integer(2), "Daniel", "156 Brentfield Loop"},
+ {new Integer(3), "Williams", "456 penny lane"},
+ {new Integer(4), "Williams", "5000 pineville"},
+ {new Integer(5), "Williams", "100000 firefly lane"}
+ };
+
+ public CustomerData(Connection connection) {
+ super(connection, customerData);
+ }
+
+
+ public String getTableName() {
+ return "CUSTOMER";
+ }
+
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java
new file mode 100644
index 0000000000..fbd9cf7cab
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java
@@ -0,0 +1,45 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.test.framework.RelationshipData;
+
+
+public class DepEmpData extends RelationshipData {
+
+ private static Object[][] data = {
+ {"Advanced Technologies", "John Jones"},
+ {"Advanced Technologies", "Jane Doe"},
+ {"Advanced Technologies", "Al Smith"}
+ };
+
+
+ public DepEmpData(Connection c) {
+ super(c, data);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select department.id from department where department.name = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update employee set employee.departmentid = ? where employee.name = ?";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java
new file mode 100644
index 0000000000..d3c10affdd
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java
@@ -0,0 +1,41 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+
+public class DepartmentData extends TestDataWithExplicitColumns {
+
+ private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR};
+
+ private static Object[][] deptData = { { "Advanced Technologies", "NY", "123" } };
+
+ private static String[] deptColumns = { "NAME", "LOCATION", "NUMBER" };
+
+ public DepartmentData(Connection connection) {
+ super(connection, deptData, deptColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "DEPARTMENT";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java
new file mode 100644
index 0000000000..f9dffc9360
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java
@@ -0,0 +1,45 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+
+public class EmployeeData extends TestDataWithExplicitColumns {
+
+ private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.SMALLINT};
+
+ private static Object[][] employeeData = {
+ { "John Jones", "E0001", new Boolean(false) },
+ { "Mary Smith", "E0002", new Boolean(true)},
+ { "Jane Doe", "E0003", new Boolean(false)},
+ { "Al Smith", "E0004", new Boolean(true) } };
+
+ private static String[] employeeColumns = { "NAME", "SN", "MANAGER" };
+
+ public EmployeeData(Connection connection) {
+ super(connection, employeeData, employeeColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "EMPLOYEE";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java
new file mode 100644
index 0000000000..e6a52204f8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java
@@ -0,0 +1,42 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+
+public class OrderData extends TestData {
+
+
+ public static Object[][] orderData = {
+ {new Integer(1), "recombobulator", new Integer(47), new Integer(1)},
+ {new Integer(2), "wrench", new Integer(17), new Integer(3)},
+ {new Integer(3), "pliers", new Integer(500), new Integer(1)},
+ {new Integer(4), "Tooth Paste", new Integer(12), new Integer(2)}
+ };
+
+ public OrderData(Connection c) {
+ super(c, orderData);
+ }
+
+ public String getTableName() {
+ return "ANORDER";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java
new file mode 100644
index 0000000000..9193f7c6d5
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java
@@ -0,0 +1,43 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+
+public class OrderDetailsData extends TestData {
+
+ //CREATE TABLE ORDERDETAILS (ORDERID INT NOT NULL, PRODUCTID INT NOT NULL, PRICE FLOAT, PRIMARY KEY (ORDERID, PRODUCTID))
+
+ public static Object[][] orderDetailsData = {
+ {new Integer(1), new Integer(1), new Float(1.1)},
+ {new Integer(1), new Integer(2), new Float(1.2)},
+ {new Integer(2), new Integer(1), new Float(2.1)},
+ {new Integer(2), new Integer(2), new Float(2.2)}
+ };
+
+ public OrderDetailsData(Connection c) {
+ super(c, orderDetailsData);
+ }
+
+ public String getTableName() {
+ return "ORDERDETAILS";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java
new file mode 100644
index 0000000000..dd78b1be35
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java
@@ -0,0 +1,52 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+
+public class PartData extends TestDataWithExplicitColumns {
+
+
+ //CREATE TABLE PART (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), QUANTITY INT, PARENT_ID INT )
+
+ private static String[] partColumns = { "ID" , "NAME", "QUANTITY", "PARENT_ID"};
+
+ private static int[] columnTypes = {Types.INTEGER, Types.VARCHAR, Types.INTEGER, Types.INTEGER};
+
+ private static Object[][] partData = {
+ {new Integer(1), "Engine", new Integer(1), null},
+ {new Integer(2), "Block", new Integer(1), new Integer(1)},
+ {new Integer(3), "Cam Shaft", new Integer(2), new Integer(1)},
+ {new Integer(4), "Piston", new Integer(8), new Integer(1)},
+ {new Integer(5), "Piston Ring", new Integer(2), new Integer(4)}
+ };
+
+ public PartData(Connection connection) {
+ super(connection, partData, partColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "PART";
+ }
+
+}
+
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java
new file mode 100644
index 0000000000..0c6d41d096
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java
@@ -0,0 +1,51 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+
+public class StateData extends TestData {
+
+ public StateData(Connection c) {
+ super(c, stateData);
+ }
+
+ public String getTableName() {
+ return "STATES";
+ }
+
+ private static Object[][] stateData = {
+ {new Integer(1), "NC"},
+ {new Integer(2), "CO"},
+ {new Integer(3), "CA"}
+ };
+
+ public void doDeletes() throws SQLException {
+ deleteRowsFromTable();
+ }
+
+ public void doInserts() throws SQLException {
+ insertRows();
+
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java
new file mode 100644
index 0000000000..1097b07cc5
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+
+public class TypesData extends TestData {
+
+ private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:ss:mm.SSS");
+ private static Timestamp timestamp = getTimestamp();
+
+ private static Object[][] customerData = {
+ {new Integer(1), timestamp, new Float(1234567.89), new Float(1234567.89)}
+ };
+
+ public TypesData(Connection connection) {
+ super(connection, customerData);
+ }
+
+ public String getTableName() {
+ return "TYPETEST";
+ }
+
+
+ //Utilities
+ private static Date getDate() {
+
+ try {
+ return dateFormat.parse("1966-12-20 00:00:00.0");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ public static Timestamp getTimestamp() {
+
+ return new Timestamp(getDate().getTime());
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java
new file mode 100644
index 0000000000..75df028490
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java
@@ -0,0 +1,35 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import junit.framework.Test;
+
+public class DB2Setup extends DatabaseSetup {
+
+ public DB2Setup(Test test) {
+ super(test);
+ }
+
+ protected void initConnectionProtocol() {
+
+ platformName = "DB2";
+ driverName = "com.ibm.db2.jcc.DB2Driver";
+ databaseURL = "jdbc:db2:DASTEST";
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java
new file mode 100644
index 0000000000..c4e75d20a8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java
@@ -0,0 +1,155 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+
+/**
+ *
+ */
+public class DasTest extends TestCase {
+
+ public static Connection connection = null;
+ private boolean usingDefaultSetup = false;
+
+ /**
+ * Tears down the fixture, for example, close a network connection. This
+ * method is called after a test is executed.
+ */
+ protected void tearDown() throws Exception {
+// if (usingDefaultSetup)
+// connection = null;
+ }
+
+ protected Connection getAutoConnection() throws SQLException {
+
+ Connection c = primGetConnection();
+ c.setAutoCommit(true);
+ return connection;
+
+ }
+
+ protected Connection getConnection() throws SQLException {
+
+ Connection c = primGetConnection();
+ c.setAutoCommit(false);
+ return connection;
+ }
+
+ /**
+ * This provides the default connection for runing single test cases on a
+ * chosen platform.
+ */
+ private Connection primGetConnection() {
+ if (connection == null)
+ defaultSetup();
+ return connection;
+ }
+
+
+
+ /**
+ * This is a bit of a hack since it counts on constructor initialization of the
+ * DatabaseSet up class and also calls its setUp method directly. This is a misuse
+ * of this JUnit TestSetup subclass .
+ *
+ * TODO - refactor to avoid this hackiness ... could move this logic to its own
+ * class that is then invoked by DatabaseSetUp
+ */
+ private void defaultSetup() {
+
+ usingDefaultSetup = true;
+
+// DatabaseSetup setUp = new DB2Setup(this);
+ DatabaseSetup setUp = new DerbySetup(this);
+ try {
+ setUp.setUp();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+
+ //Utilities
+ protected InputStream getConfig(String fileName) throws FileNotFoundException {
+ return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
+ }
+
+ protected void write(String label, ResultSet rs) throws IOException, SQLException {
+
+ ResultSetMetaData md = rs.getMetaData();
+ int count = md.getColumnCount();
+ System.out.println("Contents of ResultSet from " + label);
+ for (int i = 1; i <= count; i++) {
+ System.out.print("\t");
+ System.out.println (md.getColumnLabel(i));
+ }
+ System.out.println("");
+ while (rs.next()) {
+ for (int i = 1; i <= count; i++) {
+ System.out.print("\t");
+ System.out.print(rs.getString(i));
+ }
+ System.out.println("\t");
+ }
+ System.out.println("done");
+ }
+
+
+ protected void printList(List data) {
+ Iterator i = data.iterator();
+ while ( i.hasNext()) {
+ System.out.println();
+ DataObject obj = (DataObject) i.next();
+ Iterator props = obj.getType().getProperties().iterator();
+ while ( props.hasNext()) {
+ Property p = (Property) props.next();
+ if ( p.isMany() ) {
+ System.out.print("[ " + p.getName() + " ] ");
+ Iterator children = obj.getList(p).iterator();
+ while ( children.hasNext()) {
+ DataObject child = (DataObject) children.next();
+ System.out.print("[ " + child.get("ID") + " ]");
+ }
+ System.out.println();
+ } else if ( !p.getType().isDataType()) {
+ DataObject child = obj.getDataObject(p);
+ if ( child != null )
+ System.out.println("[ " + p.getName() + " ] " + "[ " + child.get("ID") + " ]");
+ } else {
+ System.out.println("[ " + p.getName() + " ] " + obj.get(p));
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
new file mode 100644
index 0000000000..f0c5223cf0
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
@@ -0,0 +1,238 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import junit.extensions.TestSetup;
+import junit.framework.Test;
+
+public class DatabaseSetup extends TestSetup {
+
+ protected String platformName = "Not initialized";
+
+ protected String driverName = "Not initialized";
+
+ protected String databaseURL = "Not initialized";
+
+ private Connection connection;
+
+ protected Statement s;
+
+ public DatabaseSetup(Test test) {
+ super(test);
+ initConnectionProtocol();
+ initConnection();
+ DasTest.connection = connection;
+ }
+
+ protected void initConnectionProtocol() {
+ // Subclasses provide implementation
+ }
+
+ private void initConnection() {
+
+ try {
+
+ Class.forName(driverName).newInstance();
+ connection = DriverManager.getConnection(databaseURL);
+ connection.setAutoCommit(false);
+
+ } catch (Exception e) {
+ if (e instanceof SQLException)
+ ((SQLException) e).getNextException().printStackTrace();
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ protected void setUp() throws Exception {
+
+ System.out.println("Setting up for " + platformName + " run");
+
+ s = connection.createStatement();
+
+ try {
+ dropTables();
+ dropProcedures();
+ createTables();
+ createProcedures();
+ connection.commit();
+ } catch (SQLException e) {
+ connection.rollback();
+ }
+
+ }
+
+ protected void tearDown() throws Exception {
+
+ System.out.println("Ending " + platformName + " run");
+ connection.close();
+
+ }
+
+ private void dropTables() {
+
+// System.out.println("Dropping tables");
+
+ String[] statements = {
+
+ "DROP TABLE CUSTOMER", "DROP TABLE ANORDER", "DROP TABLE ORDERDETAILS", "DROP TABLE ITEM",
+ "DROP TABLE COMPANY", "DROP TABLE EMPLOYEE", "DROP TABLE DEPARTMENT", "DROP TABLE BOOK",
+ "DROP TABLE PART", "DROP TABLE TYPETEST", "DROP TABLE CITIES", "DROP TABLE STATES",
+ "DROP TABLE conmgt.SERVERSTATUS"
+
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ try {
+ s.execute(statements[i]);
+ } catch (SQLException e) {
+ // If the table does not exist then ignore the exception on drop
+ if (!e.getMessage().contains("does not exist"))
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ protected void dropProcedures() {
+
+// System.out.println("Dropping procedures");
+
+ String[] statements = {
+
+ "DROP PROCEDURE GETALLCOMPANIES", "DROP PROCEDURE DELETECUSTOMER", "DROP PROCEDURE GETNAMEDCOMPANY",
+ "DROP PROCEDURE GETCUSTOMERANDORDERS", "DROP PROCEDURE GETNAMEDCUSTOMERS"
+
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ try {
+ s.execute(statements[i]);
+ } catch (SQLException e) {
+ // If the proc does not exist then ignore the exception on drop
+ if (!e.getMessage().contains("does not exist"))
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ private void createTables() {
+
+// System.out.println("Creating tables");
+
+ try {
+
+ s.execute(getCreateCustomer());
+ s.execute(getCreateAnOrder());
+ s.execute(getCreateOrderDetails());
+ s.execute(getCreateItem());
+ s.execute(getCreateCompany());
+ s.execute(getCreateEmployee());
+ s.execute(getCreateDepartment());
+ s.execute(getCreateBook());
+ s.execute(getCreatePart());
+ s.execute(getCreateTypeTest());
+ s.execute(getCreateStates());
+ s.execute(getCreateCities());
+ s.execute(getCreateServerStatus());
+
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected void createProcedures() {
+
+// System.out.println("Creating procedures");
+ try {
+
+ s.execute("CREATE PROCEDURE GETALLCOMPANIES() PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME 'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getAllCompanies'");
+ s.execute("CREATE PROCEDURE DELETECUSTOMER(theId int) PARAMETER STYLE JAVA LANGUAGE JAVA MODIFIES SQL DATA EXTERNAL NAME 'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.deleteCustomer'");
+ s.execute("CREATE PROCEDURE GETNAMEDCOMPANY(theName VARCHAR(100)) PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME 'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getNamedCompany'");
+ s.execute("CREATE PROCEDURE GETCUSTOMERANDORDERS(theID INTEGER) PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME 'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getCustomerAndOrders'");
+ s.execute("CREATE PROCEDURE GETNAMEDCUSTOMERS(theName VARCHAR(100), OUT theCount INTEGER) PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME 'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getNamedCustomers'");
+ // TODO - "GETNAMEDCUSTOMERS" is failing on DB2 with SQLCODE: 42723. Need to investigate
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ //
+ // This section povides methods that return strings for table creation.
+ // Platform-specific sublcasses
+ // can override these as necessary
+ //
+
+ protected String getCreateCustomer() {
+ return "CREATE TABLE CUSTOMER (ID INT PRIMARY KEY NOT NULL, LASTNAME VARCHAR(30) DEFAULT 'Garfugengheist', ADDRESS VARCHAR(30))";
+ }
+
+ protected String getCreateAnOrder() {
+ return "CREATE TABLE ANORDER (ID INT PRIMARY KEY NOT NULL, PRODUCT VARCHAR(30), QUANTITY INT, CUSTOMER_ID INT)";
+ }
+
+ protected String getCreateOrderDetails() {
+ return "CREATE TABLE ORDERDETAILS (ORDERID INT NOT NULL, PRODUCTID INT NOT NULL, PRICE FLOAT, PRIMARY KEY (ORDERID, PRODUCTID))";
+ }
+
+ protected String getCreateItem() {
+ return "CREATE TABLE ITEM (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(30))";
+ }
+
+ protected String getCreateCompany() {
+ return "CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY ,NAME VARCHAR(30), EOTMID INT)";
+ }
+
+ protected String getCreateEmployee() {
+ return "CREATE TABLE EMPLOYEE (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY, NAME VARCHAR(30), SN VARCHAR(10), MANAGER SMALLINT, DEPARTMENTID INT)";
+ }
+
+ protected String getCreateDepartment() {
+ return "CREATE TABLE DEPARTMENT (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY, NAME VARCHAR(30), LOCATION VARCHAR(30), NUMBER VARCHAR(10), COMPANYID INT)";
+ }
+
+ protected String getCreateBook() {
+ return "CREATE TABLE BOOK (BOOK_ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), AUTHOR VARCHAR(30), QUANTITY INT, OCC INTEGER)";
+ }
+
+ protected String getCreatePart() {
+ return "CREATE TABLE PART (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), QUANTITY INT, PARENT_ID INT )";
+ }
+
+ protected String getCreateTypeTest() {
+ return "CREATE TABLE TYPETEST (ID INT PRIMARY KEY NOT NULL, ATIMESTAMP TIMESTAMP, ADECIMAL DECIMAL(9,2), AFLOAT FLOAT)";
+ }
+
+ protected String getCreateStates() {
+ return "CREATE TABLE STATES (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(2))";
+ }
+
+ protected String getCreateCities() {
+ return "CREATE TABLE CITIES (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), STATE_ID INT, CONSTRAINT FK1 FOREIGN KEY (STATE_ID) REFERENCES STATES (ID) ON DELETE NO ACTION ON UPDATE NO ACTION)";
+ }
+
+ protected String getCreateServerStatus() {
+
+ return "CREATE TABLE CONMGT.SERVERSTATUS (STATUSID INTEGER PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 ,INCREMENT BY 1), MANAGEDSERVERID INTEGER NOT NULL, TIMESTAMP TIMESTAMP NOT NULL)";
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java
new file mode 100644
index 0000000000..082b1ec50a
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java
@@ -0,0 +1,42 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.util.Properties;
+
+import junit.framework.Test;
+
+public class DerbySetup extends DatabaseSetup {
+
+ public DerbySetup(Test test) {
+ super(test);
+ }
+
+ protected void initConnectionProtocol() {
+
+ //Set the derby property to explicitly specify the database location relative
+ //from current directory to "target"
+ Properties p = System.getProperties();
+ p.put("derby.system.home", "target");
+
+ platformName = "Derby";
+ driverName = "org.apache.derby.jdbc.EmbeddedDriver";
+ databaseURL = "jdbc:derby:dastest; create = true";
+
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java
new file mode 100644
index 0000000000..cd314e0fce
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java
@@ -0,0 +1,79 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * Stored Procedures for DB2 and Derby SP tests
+ *
+ */
+public class JavaStoredProcs {
+
+ public static void getAllCompanies(ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("SELECT * FROM COMPANY");
+ results[0] = ps.executeQuery();
+ }
+
+ public static void deleteCustomer(int theId) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("DELETE FROM CUSTOMER WHERE ID = ?");
+ ps.setInt(1, theId);
+ ps.execute();
+
+ }
+
+ public static void getNamedCompany(String theName, ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("SELECT * FROM COMPANY WHERE NAME = ?");
+ ps.setString(1, theName);
+ results[0] = ps.executeQuery();
+ }
+
+ public static void getCustomerAndOrders(int theId, ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn
+ .prepareStatement("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID WHERE CUSTOMER.ID = ?");
+ ps.setInt(1, theId);
+ results[0] = ps.executeQuery();
+ }
+
+ public static void getNamedCustomers(String theName, int[] outCount, ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("SELECT * FROM CUSTOMER WHERE LASTNAME = ?");
+ ps.setString(1, theName);
+ results[0] = ps.executeQuery();
+
+ ps = conn.prepareStatement("SELECT COUNT(*) FROM CUSTOMER WHERE LASTNAME = ?");
+ ps.setString(1, theName);
+
+ ResultSet rs = ps.executeQuery();
+ rs.next();
+ outCount[0] = rs.getInt(1);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java
new file mode 100644
index 0000000000..b3616882f4
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java
@@ -0,0 +1,96 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.sql.SQLException;
+
+
+import junit.framework.Test;
+
+public class MySQLSetup extends DatabaseSetup {
+
+ public MySQLSetup(Test test) {
+ super(test);
+ }
+
+ protected void initConnectionProtocol() {
+
+ platformName = "MySQL";
+ driverName = "com.mysql.jdbc.Driver";
+ databaseURL = "jdbc:mysql:///dastest?user=dastester&password=dastester";
+
+ }
+
+
+ protected void createProcedures () {
+
+ String createGetAllCompanies =
+ "CREATE PROCEDURE `dastest`.`GETALLCOMPANIES` () "+
+ " SELECT * FROM COMPANY ";
+
+
+ String createDeleteCustomer =
+ "CREATE PROCEDURE `dastest`.`DELETECUSTOMER` (theId INT) " +
+ " DELETE FROM CUSTOMER WHERE ID = theId ";
+
+
+ String createGetNamedCustomers =
+ "CREATE PROCEDURE `dastest`.`GETNAMEDCUSTOMERS`(IN thename VARCHAR(30), OUT theCount INTEGER ) " +
+ " BEGIN " +
+ " SELECT * FROM CUSTOMER AS CUSTOMER WHERE LASTNAME = theName; " +
+ " SET theCount = (SELECT COUNT(*) FROM CUSTOMER WHERE LASTNAME = theName); " +
+ " END ";
+
+ String createGetCustomerAndOrders =
+ " CREATE PROCEDURE `dastest`.`GETCUSTOMERANDORDERS` (theId INT) " +
+ " SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID WHERE CUSTOMER.ID = theId ";
+
+
+ String createGetNamedCompany =
+ " CREATE PROCEDURE `dastest`.`GETNAMEDCOMPANY` (theName VARCHAR(100)) " +
+ " SELECT * FROM COMPANY WHERE NAME = theName";
+
+ System.out.println("Creating procedures");
+ try {
+
+ s.execute(createGetAllCompanies);
+ s.execute(createDeleteCustomer);
+ s.execute(createGetNamedCompany);
+ s.execute(createGetCustomerAndOrders);
+// s.execute(createGetNamedCustomers);
+//TODO - add this back after DB2 problem is resolved
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ //Overrides for table creation
+ protected String getCreateCompany() {
+ return "CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30))";
+ }
+ protected String getCreateEmployee() {
+ return "CREATE TABLE EMPLOYEE (ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30), SN VARCHAR(10), MANAGER SMALLINT, DEPARTMENTID INT)";
+ }
+ protected String getCreateDepartment() {
+ return "CREATE TABLE DEPARTMENT (ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30), LOCATION VARCHAR(30), NUMBER VARCHAR(10), COMPANYID INT, EOTM INT)";
+ }
+ protected String getCreateTypeTest() {
+ return "CREATE TABLE TYPETEST (ID INT PRIMARY KEY NOT NULL, ATIMESTAMP DATETIME, ADECIMAL DECIMAL(9,2), AFLOAT FLOAT)";
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java
new file mode 100644
index 0000000000..330320656e
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java
@@ -0,0 +1,81 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public abstract class RelationshipData {
+ protected Object[][] data;
+ private int currentRow = -1;
+ protected Connection connection;
+
+
+ public RelationshipData(Connection c, Object[][] inputData) {
+ this.connection = c;
+ this.data = inputData;
+ }
+
+ public int size() {
+ return data[0].length;
+ }
+
+ public int numberOfRows() {
+ return data.length;
+ }
+
+ public boolean next() {
+ ++currentRow;
+ if ( currentRow < numberOfRows() )
+ return true;
+ else
+ return false;
+ }
+
+
+ public void refresh() throws SQLException {
+ updateRelationships();
+ }
+
+ protected abstract String getParentRetrievalStatement();
+ protected abstract String getChildUpdateStatement();
+
+
+ protected void updateRelationships() throws SQLException {
+ // { MegaCorp, Advanced Technologies }
+ // select company.id from company where company.name = ?
+ PreparedStatement retrieveParent = connection.prepareStatement(getParentRetrievalStatement());
+ // update department set department.companyid = ? where department.name = ?
+ PreparedStatement updateChild = connection.prepareStatement(getChildUpdateStatement());
+
+ while ( next() ) {
+ retrieveParent.setObject(1, data[currentRow][0]);
+ retrieveParent.execute();
+ ResultSet rs = retrieveParent.getResultSet();
+ rs.next();
+ Object parentID = rs.getObject(1);
+ retrieveParent.clearParameters();
+
+ updateChild.setObject(1, parentID);
+ updateChild.setObject(2, data[currentRow][1]);
+ updateChild.execute();
+ updateChild.clearParameters();
+ }
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java
new file mode 100644
index 0000000000..686433bfc8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java
@@ -0,0 +1,87 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public abstract class TestData {
+
+ protected Object[][] data;
+ private int currentRow = -1;
+ protected Connection connection;
+
+
+ public TestData(Connection c, Object[][] customerData) {
+ this.connection = c;
+ this.data = customerData;
+ }
+
+ public int size() {
+ return data[0].length;
+ }
+
+ public int numberOfRows() {
+ return data.length;
+ }
+
+ public boolean next() {
+ ++currentRow;
+ if ( currentRow < numberOfRows() )
+ return true;
+ else
+ return false;
+ }
+
+ public abstract String getTableName();
+
+
+ public Object getObject(int i) {
+ return data[currentRow][i-1];
+ }
+
+ public void refresh() throws SQLException {
+ deleteRowsFromTable();
+ insertRows();
+ }
+
+ protected void deleteRowsFromTable() throws SQLException {
+ PreparedStatement ps = connection.prepareStatement("delete from " + getTableName());
+ ps.execute();
+ }
+
+ protected void insertRows() throws SQLException {
+ StringBuffer sql = new StringBuffer();
+ sql.append("insert into ");
+ sql.append(getTableName());
+ sql.append(" values (");
+ for ( int i=1; i < size(); i++) {
+ sql.append("?,");
+ }
+ sql.append("?)");
+ PreparedStatement ps = connection.prepareStatement(sql.toString());
+
+ while ( next() ) {
+ for ( int i=1; i <= size(); i++ ) {
+ ps.setObject(i, getObject(i));
+ }
+ ps.execute();
+ ps.clearParameters();
+ }
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java
new file mode 100644
index 0000000000..8ded99af9b
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java
@@ -0,0 +1,82 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.framework;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.util.DebugUtil;
+
+
+public abstract class TestDataWithExplicitColumns extends TestData {
+
+ protected String[] columns;
+ protected int[] sqlTypes;
+
+ private static boolean debug = false;
+
+ public TestDataWithExplicitColumns(Connection c, Object[][] data,
+ String[] columns, int[] sqlTypes) {
+ super(c, data);
+ this.columns = columns;
+ this.sqlTypes = sqlTypes;
+ }
+
+ private String getColumn(int i) {
+ return columns[i - 1];
+ }
+
+ private int getSqlType(int i) {
+ return (sqlTypes[i - 1]);
+ }
+
+ // Create an insert statement of the following form ...
+ // "INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)"
+ // This is necessary for tables with a generated column since the PK value is not provided
+ protected void insertRows() throws SQLException {
+ StringBuffer sql = new StringBuffer();
+ sql.append("insert into ");
+ sql.append(getTableName());
+
+ sql.append(" (");
+ for (int i = 1; i <= size(); i++) {
+ sql.append(getColumn(i));
+ if ( i < size() )
+ sql.append(',');
+ }
+ sql.append(" )");
+
+ sql.append(" values (");
+ for (int i = 1; i < size(); i++) {
+ sql.append("?,");
+ }
+ sql.append("?)");
+
+ DebugUtil.debugln(getClass(), debug, sql.toString());
+ PreparedStatement ps = connection.prepareStatement(sql.toString());
+
+ while (next()) {
+ for (int i = 1; i <= size(); i++) {
+ ps.setObject(i, getObject(i), getSqlType(i));
+ }
+ ps.execute();
+ ps.clearParameters();
+ }
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java
new file mode 100644
index 0000000000..e25d2c4c95
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java
@@ -0,0 +1,40 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.mappings;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class IntegerToBooleanConverter implements Converter {
+
+ public IntegerToBooleanConverter() {
+ super();
+ }
+
+ public Object getPropertyValue(Object columnData) {
+ Integer value = (Integer) columnData;
+ return value.intValue() == 0 ? Boolean.FALSE : Boolean.TRUE;
+ }
+
+ public Object getColumnValue(Object propertyData) {
+ Boolean value = (Boolean) propertyData;
+ if ( value.booleanValue())
+ return new Integer(1);
+ else
+ return new Integer(0);
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java
new file mode 100644
index 0000000000..7c164bd675
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java
@@ -0,0 +1,73 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.mappings;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+
+public class SillyDateStringConverter implements Converter {
+
+ public SillyDateStringConverter() {
+ super();
+ }
+
+ private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd");
+
+ private static Date kbday;
+
+ private static Date tbday;
+
+ static {
+ try {
+ kbday = myformat.parse("1957.09.27");
+ tbday = myformat.parse("1966.12.20");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public Object getPropertyValue(Object columnData) {
+
+ if (columnData.equals("Williams"))
+ return kbday;
+
+ if (columnData.equals("Pavick"))
+ return tbday;
+
+ throw new IllegalArgumentException();
+
+ }
+
+ public Object getColumnValue(Object propertyData) {
+
+ if (propertyData.equals(kbday))
+ return "Williams";
+
+ if (propertyData.equals(tbday))
+ return "Pavick";
+
+ throw new IllegalArgumentException();
+
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java
new file mode 100644
index 0000000000..8ff57aef6d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java
@@ -0,0 +1,37 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.mappings;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class StringToIntegerConverter implements Converter {
+
+ public StringToIntegerConverter() {
+ super();
+ }
+
+ public Object getPropertyValue(Object columnData) {
+ // System.out.println("Converting object.. " + columnData);
+
+ return new Integer(columnData.toString());
+ }
+
+ public Object getColumnValue(Object columnData) {
+ return columnData.toString();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java
new file mode 100644
index 0000000000..74a5e2917f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java
@@ -0,0 +1,35 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.mappings;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class StringToLongConverter implements Converter {
+
+ public StringToLongConverter() {
+ super();
+ }
+
+ public Object getPropertyValue(Object columnData) {
+ return new Long(columnData.toString());
+ }
+
+ public Object getColumnValue(Object columnData) {
+ return columnData.toString();
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java
new file mode 100644
index 0000000000..53941ad489
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java
@@ -0,0 +1,98 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.suites;
+
+import org.apache.tuscany.das.rdb.test.BestPracticeTests;
+import org.apache.tuscany.das.rdb.test.CUDGeneration;
+import org.apache.tuscany.das.rdb.test.CompanyTests;
+import org.apache.tuscany.das.rdb.test.CompoundKeyTests;
+import org.apache.tuscany.das.rdb.test.ConverterTests;
+import org.apache.tuscany.das.rdb.test.CorrectedDefectTests;
+import org.apache.tuscany.das.rdb.test.CrudWithChangeHistory;
+import org.apache.tuscany.das.rdb.test.ExceptionTests;
+import org.apache.tuscany.das.rdb.test.GeneratedCommandTests;
+import org.apache.tuscany.das.rdb.test.GeneratedId;
+import org.apache.tuscany.das.rdb.test.GraphMergeTests;
+import org.apache.tuscany.das.rdb.test.NameMappingTests;
+import org.apache.tuscany.das.rdb.test.OCCTests;
+import org.apache.tuscany.das.rdb.test.OneToOneRelationshipTests;
+import org.apache.tuscany.das.rdb.test.OperationOrderingTests;
+import org.apache.tuscany.das.rdb.test.Paging;
+import org.apache.tuscany.das.rdb.test.PartialUpdateTests;
+import org.apache.tuscany.das.rdb.test.PassiveConnectionTests;
+import org.apache.tuscany.das.rdb.test.ProgrammaticConfigTests;
+import org.apache.tuscany.das.rdb.test.RecursiveTests;
+import org.apache.tuscany.das.rdb.test.RelationshipTests;
+import org.apache.tuscany.das.rdb.test.ResultSetShapeTests;
+import org.apache.tuscany.das.rdb.test.SerializationTests;
+import org.apache.tuscany.das.rdb.test.SimplestCrud;
+import org.apache.tuscany.das.rdb.test.StoredProcs;
+import org.apache.tuscany.das.rdb.test.TopDown;
+import org.apache.tuscany.das.rdb.test.TypeTests;
+import org.apache.tuscany.das.rdb.test.CommandGroupTests;
+import org.apache.tuscany.das.rdb.test.typed.SimplestStaticCrud;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllCommonTests {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite("All platform-common DAS tests");
+ //$JUnit-BEGIN$
+
+ suite.addTest(new TestSuite (SimplestCrud.class));
+ suite.addTest(new TestSuite (CrudWithChangeHistory.class));
+ suite.addTest(new TestSuite (SimplestStaticCrud.class));
+ suite.addTest(new TestSuite (Paging.class));
+ suite.addTest(new TestSuite (GeneratedId.class));
+
+ suite.addTest(new TestSuite (StoredProcs.class));
+ suite.addTest(new TestSuite (CUDGeneration.class));
+ suite.addTest(new TestSuite (TopDown.class));
+ suite.addTest(new TestSuite (OCCTests.class));
+ suite.addTest(new TestSuite (RecursiveTests.class));
+
+ suite.addTest(new TestSuite (GraphMergeTests.class));
+ suite.addTest(new TestSuite (CompoundKeyTests.class));
+ suite.addTest(new TestSuite (RelationshipTests.class));
+ suite.addTest(new TestSuite (NameMappingTests.class));
+ suite.addTest(new TestSuite (GeneratedCommandTests.class));
+
+ suite.addTest(new TestSuite (CompanyTests.class));
+ suite.addTest(new TestSuite (ResultSetShapeTests.class));
+ suite.addTest(new TestSuite (TypeTests.class));
+ suite.addTest(new TestSuite (OperationOrderingTests.class));
+ suite.addTest(new TestSuite (ConverterTests.class));
+
+ suite.addTest(new TestSuite (PartialUpdateTests.class));
+ suite.addTest(new TestSuite (ExceptionTests.class));
+ suite.addTest(new TestSuite (PassiveConnectionTests.class));
+ suite.addTest(new TestSuite (SerializationTests.class));
+
+ suite.addTest(new TestSuite (CommandGroupTests.class));
+ suite.addTest(new TestSuite (BestPracticeTests.class));
+ suite.addTest(new TestSuite (CorrectedDefectTests.class));
+ suite.addTest(new TestSuite (OneToOneRelationshipTests.class));
+
+ suite.addTest(new TestSuite (ProgrammaticConfigTests.class));
+
+ //$JUnit-END$
+ return suite;
+ }
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java
new file mode 100644
index 0000000000..a5fcb5eba0
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java
@@ -0,0 +1,39 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.suites;
+
+import org.apache.tuscany.das.rdb.test.ReadDBSchemaTests;
+import org.apache.tuscany.das.rdb.test.framework.DB2Setup;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTestsDB2 {
+
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(AllCommonTests.suite());
+ suite.addTest(new TestSuite (ReadDBSchemaTests.class));
+
+ TestSuite suite2 = new TestSuite("All DAS tests on DB2");
+ suite2.addTest(new DB2Setup(suite));
+ return suite2;
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java
new file mode 100644
index 0000000000..8af82f0114
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java
@@ -0,0 +1,34 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.suites;
+
+import org.apache.tuscany.das.rdb.test.framework.DerbySetup;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTestsDerby extends TestSuite {
+
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite("All DAS tests on Derby");
+ suite.addTest(new DerbySetup(AllCommonTests.suite()));
+ return suite;
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java
new file mode 100644
index 0000000000..2b862eba8c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java
@@ -0,0 +1,34 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.suites;
+
+import org.apache.tuscany.das.rdb.test.framework.MySQLSetup;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTestsMySQL {
+
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite("All DAS tests on MySQL");
+ suite.addTest(new MySQLSetup(AllCommonTests.suite()));
+ return suite;
+
+ }
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java
new file mode 100644
index 0000000000..f8baca2cb8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java
@@ -0,0 +1,58 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed 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.das.rdb.test.typed;
+
+import java.io.InputStream;
+import java.util.Collection;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.customer.DataGraphRoot;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.helper.TypeHelper;
+
+
+/**
+ */
+public class SimplestStaticCrud extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ public void testRead() throws Exception {
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+ InputStream mapping = getClass().getClassLoader().getResourceAsStream("basicStaticCustomer.xml");
+ Command select = Command.FACTORY.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = :LASTNAME",mapping);
+ select.setConnection(getConnection());
+ select.setParameterValue("LASTNAME", "Williams");
+ TypeHelper helper = TypeHelper.INSTANCE;
+
+ select.setDataObjectModel(helper.getType(DataGraphRoot.class));
+
+ DataGraphRoot root = (DataGraphRoot) select.executeQuery();
+
+ Collection customers = root.getCustomers();
+ assertEquals(4, customers.size());
+ }
+
+
+}
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/1xM_mapping_no_cud.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/1xM_mapping_no_cud.xml
new file mode 100644
index 0000000000..cb30e67f6e
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/1xM_mapping_no_cud.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER" propertyName="Customer">
+ <Column name="ID" propertyName="iD" primaryKey="true"/>
+ </Table>
+
+ <Table name="ANORDER" propertyName="AnOrder">
+ <Column name="CUSTOMER_ID" propertyName="customerID"/>
+ <Column name="ID" propertyName="iD" primaryKey="true"/>
+ </Table>
+
+ <Relationship name="orders" primaryKeyTable="CUSTOMER" foreignKeyTable="ANORDER" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
+ </Relationship>
+
+</Config>
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/BooksConfig.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/BooksConfig.xml
new file mode 100644
index 0000000000..b7e938ec9f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/BooksConfig.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="BOOK">
+ <Column name="BOOK_ID" primaryKey="true"/>
+ <Column name="OCC" collision="true"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyConfig.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyConfig.xml
new file mode 100644
index 0000000000..5ed35f4fd3
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyConfig.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Command name="all companies" SQL="select * from COMPANY" kind="Select"/>
+
+ <Command name="all companies and departments" SQL="select * from COMPANY left outer join DEPARTMENT on COMPANY.ID = DEPARTMENT.COMPANYID" kind="Select"/>
+
+ <Command name="all departments for company" SQL="select * from COMPANY inner join DEPARTMENT on COMPANY.ID = DEPARTMENT.COMPANYID where COMPANY.ID = :ID" kind="Select"/>
+
+ <Command name="company by id with departments" SQL="select * from COMPANY left outer join DEPARTMENT on COMPANY.ID = DEPARTMENT.COMPANYID where COMPANY.ID = :ID" kind="Select"/>
+
+<!--
+ <ConnectionProperties dataSource="java:comp/env/jdbc/dastest"/>
+-->
+
+
+ <ConnectionProperties driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
+ driverURL="jdbc:derby:dastest"/>
+
+ <Table name="COMPANY">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Table name="DEPARTMENT">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Relationship name="departments" primaryKeyTable="COMPANY" foreignKeyTable="DEPARTMENT" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="COMPANYID"/>
+ </Relationship>
+
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyEmployeeConfig.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyEmployeeConfig.xml
new file mode 100644
index 0000000000..2dbac17522
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CompanyEmployeeConfig.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Command name="get all companies" SQL="select * from COMPANY" kind = "Select"/>
+
+ <Command name="get named employee" SQL="select * from EMPLOYEE where NAME=:NAME" kind = "Select">
+ <Parameter name=":NAME"/>
+ </Command>
+
+ <Command name="get named employee with company"
+ SQL="select * from EMPLOYEE left outer join COMPANY on EMPLOYEE.ID = COMPANY.EOTMID where EMPLOYEE.NAME=:NAME" kind = "Select">
+ <Parameter name=":NAME"/>
+ </Command>
+
+ <Command name="get employee by ID" SQL="select * from EMPLOYEE where ID=:PARAM1" kind = "Select">
+ <Parameter name=":PARAM1"/>
+ </Command>
+
+ <Command name="get all employees" SQL="select * from EMPLOYEE" kind = "Select"/>
+
+ <Command name="get companies with employee of the month"
+ SQL="select * from COMPANY left outer join EMPLOYEE on COMPANY.EOTMID = EMPLOYEE.ID" kind="Select"/>
+
+<!--
+ <Command name="get company and employee of the month"
+ SQL="select C.*, E.* from COMPANY AS C, EMPLOYEE AS E
+ where C.EOTMID = E.ID" kind = "Select">
+
+ </Command>
+ -->
+
+ <ConnectionProperties driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
+ driverURL="jdbc:derby:dastest"/>
+
+ <Table name="COMPANY">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Table name="DEPARTMENT">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Table name="EMPLOYEE">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Relationship name="company->employee" primaryKeyTable="EMPLOYEE" foreignKeyTable="COMPANY" many="false" >
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="EOTMID" />
+ </Relationship>
+
+</Config>
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustOrdersConnectionProps.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustOrdersConnectionProps.xml
new file mode 100644
index 0000000000..2d1fd5d20d
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustOrdersConnectionProps.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Command name="all customers" SQL="select * from CUSTOMER" kind="Select"/>
+
+ <Command name="customer and orders"
+ SQL="select * from CUSTOMER left join ANORDER on CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID"
+ kind="Select">
+ <Parameter name=":ID"/>
+ </Command>
+
+ <Command name="customer and orders"
+ SQL="select * from CUSTOMER left join ANORDER on CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID"
+ kind="Select">
+ <Parameter name=":ID"/>
+ </Command>
+
+ <!-- Test usage of '?' rather than named parameter -->
+ <Command name="order by id with ?" SQL="select * from ANORDER where ANORDER.ID = ?"
+ kind="Select">
+ <Parameter name=":ID"/>
+ </Command>
+
+ <Command name="update customer"
+ SQL="update CUSTOMER set LASTNAME = 'Pavick' where ID = :ID"
+ kind="Update">
+ <Parameter name=":ID"/>
+ </Command>
+
+ <ConnectionProperties driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
+ driverURL="jdbc:derby:dastest"/>
+
+ <Table name="CUSTOMER">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Table name="ANORDER">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Relationship name="orders" primaryKeyTable="CUSTOMER"
+ foreignKeyTable="ANORDER" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
+ </Relationship>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithConverter.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithConverter.xml
new file mode 100644
index 0000000000..24fce847de
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithConverter.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="LASTNAME" converterClassName="org.apache.tuscany.das.rdb.test.mappings.SillyDateStringConverter"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithIDConverter.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithIDConverter.xml
new file mode 100644
index 0000000000..68a4eeca07
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomerConfigWithIDConverter.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER">
+ <Column name="ID" converterClassName="org.apache.tuscany.das.rdb.test.mappings.StringToLongConverter"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomersOrdersConfig.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomersOrdersConfig.xml
new file mode 100644
index 0000000000..5146bcaab1
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/CustomersOrdersConfig.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Command name="all customers" SQL="select * from CUSTOMER" kind="Select"/>
+
+ <Command name="customer and orders"
+ SQL="select * from CUSTOMER left join ANORDER on CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID"
+ kind="Select">
+ <Parameter name=":ID"/>
+ </Command>
+
+ <Command name="order by id" SQL="select * from ANORDER where ANORDER.ID = :ID"
+ kind="Select">
+ <Parameter name=":ID"/>
+ </Command>
+
+ <Table name="CUSTOMER">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Table name="ANORDER">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Relationship name="orders" primaryKeyTable="CUSTOMER"
+ foreignKeyTable="ANORDER" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
+ </Relationship>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/OrdersOrderDetailsConfig.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/OrdersOrderDetailsConfig.xml
new file mode 100644
index 0000000000..356226747f
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/OrdersOrderDetailsConfig.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="ORDERDETAILS">
+ <Column name="ORDERID" primaryKey="true"/>
+ <Column name="PRODUCTID" primaryKey="true"/>
+ </Table>
+
+
+ <Relationship name="ORDERDETAILS" primaryKeyTable="ANORDER"
+ foreignKeyTable="ORDERDETAILS" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="ORDERID"/>
+ </Relationship>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/PartsConfig.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/PartsConfig.xml
new file mode 100644
index 0000000000..06375dabef
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/PartsConfig.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="PART">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Relationship name="subparts" primaryKeyTable="PART" foreignKeyTable="PART" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="PARENT_ID"/>
+ </Relationship>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyDepartmentMapping.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyDepartmentMapping.xml
new file mode 100644
index 0000000000..205d0d68b6
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyDepartmentMapping.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="COMPANY">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ <Column name="NAME"/>
+ </Table>
+
+ <Table name="DEPARTMENT">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ <Column name="NAME"/>
+ <Column name="NUMBER"/>
+ <Column name="COMPANYID"/>
+ <Column name="EOTM"/>
+ </Table>
+
+ <Relationship name="departments" primaryKeyTable="COMPANY" foreignKeyTable="DEPARTMENT" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="COMPANYID"/>
+ </Relationship>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyMapping.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyMapping.xml
new file mode 100644
index 0000000000..885ad383ca
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCompanyMapping.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <Table name="COMPANY">
+ <Column name="ID" primaryKey="true" generated="true"/>
+ <Column name="NAME"/>
+ </Table>
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMapping.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMapping.xml
new file mode 100644
index 0000000000..203a6333ac
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMapping.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="LASTNAME"/>
+ <Column name="ADDRESS"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithCUD.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithCUD.xml
new file mode 100644
index 0000000000..8bfd146504
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithCUD.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER"
+ create="insert into customer values (:ID, :LASTNAME, :ADDRESS)"
+ update="update customer set lastname = :LASTNAME, address = :ADDRESS where ID = :ID"
+ delete="delete from customer where ID = :ID">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="LASTNAME"/>
+ <Column name="ADDRESS"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml
new file mode 100644
index 0000000000..189286c91c
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER"
+ create="insert into customer blah values (:ID, :LASTNAME, :ADDRESS)"
+ update="update customer blah set lastname = :LASTNAME, address = :ADDRESS where ID = :ID"
+ delete="delete from customer blah where ID = :ID">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="LASTNAME"/>
+ <Column name="ADDRESS"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerOrderMapping.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerOrderMapping.xml
new file mode 100644
index 0000000000..507ce8d5e5
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicCustomerOrderMapping.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+ <Table name="ANORDER">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="CUSTOMER_ID"/>
+ </Table>
+
+ <Relationship name="orders" primaryKeyTable="CUSTOMER" foreignKeyTable="ANORDER" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
+ </Relationship>
+
+</Config>
+
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicStaticCustomer.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicStaticCustomer.xml
new file mode 100644
index 0000000000..1d01b284ae
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/basicStaticCustomer.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER" propertyName="Customer">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="LASTNAME"/>
+ <Column name="ADDRESS"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/cityStates.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/cityStates.xml
new file mode 100644
index 0000000000..63d86aafac
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/cityStates.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="STATES">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="NAME"/>
+ </Table>
+
+ <Table name="CITIES">
+
+ <Column name="ID" primaryKey="true"/>
+ <Column name="NAME"/>
+ <Column name="STATE_ID"/>
+
+ </Table>
+
+ <Relationship name="cities" primaryKeyTable="STATES" foreignKeyTable="CITIES" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="STATE_ID"/>
+ </Relationship>
+
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.ecore b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.ecore
new file mode 100644
index 0000000000..888acdf1c3
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.ecore
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="company"
+ nsURI="org.apache.tuscany.das.rdb.test/company.xsd" nsPrefix="company">
+ <eClassifiers xsi:type="ecore:EClass" name="CompanyType">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="CompanyType"/>
+ <details key="kind" value="elementOnly"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="departments" lowerBound="1"
+ upperBound="-1" eType="#//DepartmentType" containment="true" resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="departments"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="employeeOfTheMonth" unique="false"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//IDREF">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="employeeOfTheMonth"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="name"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DepartmentType">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="DepartmentType"/>
+ <details key="kind" value="elementOnly"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="employees" lowerBound="1"
+ upperBound="-1" eType="#//EmployeeType" containment="true" resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="employees"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="location" unique="false"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="location"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="name"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="number" unique="false"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int" unsettable="true">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="number"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DocumentRoot">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value=""/>
+ <details key="kind" value="mixed"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="mixed" unique="false" upperBound="-1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="elementWildcard"/>
+ <details key="name" value=":mixed"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="xMLNSPrefixMap" upperBound="-1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStringToStringMapEntry"
+ transient="true" containment="true" resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="xmlns:prefix"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="xSISchemaLocation" upperBound="-1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStringToStringMapEntry"
+ transient="true" containment="true" resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="xsi:schemaLocation"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="company" upperBound="-2"
+ eType="#//CompanyType" volatile="true" transient="true" derived="true" containment="true"
+ resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="company"/>
+ <details key="namespace" value="##targetNamespace"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EmployeeType">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="EmployeeType"/>
+ <details key="kind" value="empty"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="manager" unique="false"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
+ unsettable="true">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="manager"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="name"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="sN" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//ID"
+ iD="true">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="SN"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.genmodel b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.genmodel
new file mode 100644
index 0000000000..0b89c2c0c8
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.genmodel
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/rdbdas2/src/test/java"
+ modelPluginID="das.tests" modelName="Company" rootExtendsInterface="" rootExtendsClass="org.eclipse.emf.ecore.sdo.impl.EDataObjectImpl"
+ rootImplementsInterface="org.eclipse.emf.ecore.sdo.InternalEDataObject" suppressEMFTypes="true"
+ suppressEMFMetaData="true" featureMapWrapperInterface="commonj.sdo.Sequence" featureMapWrapperInternalInterface="org.eclipse.emf.ecore.sdo.util.ESequence"
+ featureMapWrapperClass="org.eclipse.emf.ecore.sdo.util.BasicESequence" importerID="org.eclipse.xsd.ecore.importer">
+ <foreignModel>company.xsd</foreignModel>
+ <staticPackages>http://www.eclipse.org/emf/2003/SDO</staticPackages>
+ <modelPluginVariables>EMF_COMMONJ_SDO=org.eclipse.emf.commonj.sdo</modelPluginVariables>
+ <modelPluginVariables>EMF_ECORE_SDO=org.eclipse.emf.ecore.sdo</modelPluginVariables>
+ <genPackages prefix="Company" basePackage="org.apache.tuscany.das.rdb.test" resource="XML"
+ disposableProviderFactory="true" ecorePackage="company.ecore#/">
+ <genClasses ecoreClass="company.ecore#//CompanyType">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference company.ecore#//CompanyType/departments"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//CompanyType/employeeOfTheMonth"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//CompanyType/name"/>
+ </genClasses>
+ <genClasses ecoreClass="company.ecore#//DepartmentType">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference company.ecore#//DepartmentType/employees"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//DepartmentType/location"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//DepartmentType/name"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//DepartmentType/number"/>
+ </genClasses>
+ <genClasses ecoreClass="company.ecore#//DocumentRoot">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute company.ecore#//DocumentRoot/mixed"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference company.ecore#//DocumentRoot/xMLNSPrefixMap"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference company.ecore#//DocumentRoot/xSISchemaLocation"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference company.ecore#//DocumentRoot/company"/>
+ </genClasses>
+ <genClasses ecoreClass="company.ecore#//EmployeeType">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//EmployeeType/manager"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//EmployeeType/name"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute company.ecore#//EmployeeType/sN"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.xsd b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.xsd
new file mode 100644
index 0000000000..62004bc584
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/company.xsd
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<xsd:schema targetNamespace="org.apache.tuscany.das.rdb.test/company.xsd"
+ xmlns:company="org.apache.tuscany.das.rdb.test/company.xsd"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore">
+
+ <xsd:complexType name="DatagraphRoot">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" name="companies" type="company:CompanyType"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" name="departments" type="company:DepartmentType"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" name="employees" type="company:EmployeeType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="company" type="company:CompanyType"/>
+
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="departments" type="company:DepartmentType"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" ecore:reference="EmployeeType"/>
+ </xsd:complexType>
+
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="employees" type="company:EmployeeType"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMapping.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMapping.xml
new file mode 100644
index 0000000000..12b55d06f6
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMapping.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="COMPANY" propertyName="CompanyType">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Table name="DEPARTMENT" propertyName="DepartmentType">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Table name="EMPLOYEE" propertyName="EmployeeType">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Relationship name="departments" primaryKeyTable="COMPANY" foreignKeyTable="DEPARTMENT" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="COMPANYID"/>
+ </Relationship>
+
+ <Relationship name="employees" primaryKeyTable="DEPARTMENT" foreignKeyTable="EMPLOYEE" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="DEPARTMENTID"/>
+ </Relationship>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMappingWithConverters.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMappingWithConverters.xml
new file mode 100644
index 0000000000..2888a495d6
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/companyMappingWithConverters.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="COMPANY" propertyName="CompanyType">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Table name="DEPARTMENT" propertyName="DepartmentType">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="NUMBER" converterClassName="org.apache.tuscany.das.rdb.test.mappings.StringToIntegerConverter"/>
+ </Table>
+
+ <Table name="EMPLOYEE" propertyName="EmployeeType">
+ <Column name="ID" primaryKey="true"/>
+ <Column name="MANAGER" converterClassName="org.apache.tuscany.das.rdb.test.mappings.IntegerToBooleanConverter"/>
+ </Table>
+
+ <Relationship name="departments" primaryKeyTable="COMPANY" foreignKeyTable="DEPARTMENT" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="COMPANYID"/>
+ </Relationship>
+
+ <Relationship name="employees" primaryKeyTable="DEPARTMENT" foreignKeyTable="EMPLOYEE" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="DEPARTMENTID"/>
+ </Relationship>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.ecore b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.ecore
new file mode 100644
index 0000000000..74786d8af4
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.ecore
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="customer"
+ nsURI="http:///org.apache.tuscany.das.rdb.test/customer.xsd" nsPrefix="customer">
+ <eClassifiers xsi:type="ecore:EClass" name="AnOrder">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="AnOrder"/>
+ <details key="kind" value="elementOnly"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="iD" unique="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int" unsettable="true">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="ID"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="product" unique="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="Product"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="quantity" unique="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"
+ unsettable="true">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="Quantity"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="customerID" unique="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"
+ unsettable="true">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="Customer_ID"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Customer">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="Customer"/>
+ <details key="kind" value="elementOnly"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="iD" unique="false" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int" unsettable="true">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="ID"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lastName" unique="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="lastName"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="address" unique="false"
+ lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="address"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="orders" lowerBound="1"
+ upperBound="-1" eType="#//AnOrder" containment="true" resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="orders"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DataGraphRoot">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="DataGraphRoot"/>
+ <details key="kind" value="elementOnly"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="customers" upperBound="-1"
+ eType="#//Customer" containment="true" resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="customers"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="orders" upperBound="-1"
+ eType="#//AnOrder" containment="true" resolveProxies="false">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="orders"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.genmodel b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.genmodel
new file mode 100644
index 0000000000..8c1cd53e57
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.genmodel
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/rdbdas2/src"
+ modelPluginID="rdbdas2" modelName="Customer" rootExtendsInterface="" rootExtendsClass="org.eclipse.emf.ecore.sdo.impl.EDataObjectImpl"
+ rootImplementsInterface="org.eclipse.emf.ecore.sdo.InternalEDataObject" suppressEMFTypes="true"
+ suppressEMFMetaData="true" featureMapWrapperInterface="commonj.sdo.Sequence" featureMapWrapperInternalInterface="org.eclipse.emf.ecore.sdo.util.ESequence"
+ featureMapWrapperClass="org.eclipse.emf.ecore.sdo.util.BasicESequence" importerID="org.eclipse.xsd.ecore.importer">
+ <foreignModel>customer.xsd</foreignModel>
+ <staticPackages>http://www.eclipse.org/emf/2003/SDO</staticPackages>
+ <modelPluginVariables>EMF_COMMONJ_SDO=org.eclipse.emf.commonj.sdo</modelPluginVariables>
+ <modelPluginVariables>EMF_ECORE_SDO=org.eclipse.emf.ecore.sdo</modelPluginVariables>
+ <genPackages prefix="Customer" basePackage="org.apache.tuscany.das.rdb.test" resource="XML"
+ disposableProviderFactory="true" ecorePackage="customer.ecore#/">
+ <genClasses ecoreClass="customer.ecore#//AnOrder">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute customer.ecore#//AnOrder/iD"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute customer.ecore#//AnOrder/product"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute customer.ecore#//AnOrder/quantity"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute customer.ecore#//AnOrder/customerID"/>
+ </genClasses>
+ <genClasses ecoreClass="customer.ecore#//Customer">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute customer.ecore#//Customer/iD"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute customer.ecore#//Customer/lastName"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute customer.ecore#//Customer/address"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference customer.ecore#//Customer/orders"/>
+ </genClasses>
+ <genClasses ecoreClass="customer.ecore#//DataGraphRoot">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference customer.ecore#//DataGraphRoot/customers"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference customer.ecore#//DataGraphRoot/orders"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.xsd b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.xsd
new file mode 100644
index 0000000000..c9e37ddd89
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customer.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:this="http:///org.apache.tuscany.das.rdb.test/customer.xsd" targetNamespace="http:///org.apache.tuscany.das.rdb.test/customer.xsd">
+ <xsd:complexType name="DataGraphRoot">
+ <xsd:sequence>
+
+ <xsd:element maxOccurs="unbounded" minOccurs="0" name="customers" type="this:Customer"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" name="orders" type="this:AnOrder"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="Customer">
+ <xsd:sequence>
+ <xsd:element name="ID" nillable="false" type="xsd:int"/>
+ <xsd:element name="lastName" type="xsd:string"/>
+ <xsd:element name="address" type="xsd:string"/>
+ <xsd:element maxOccurs="unbounded" name="orders" type="this:AnOrder"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+ <!-- An Order -->
+ <xsd:complexType name="AnOrder">
+ <xsd:sequence>
+ <xsd:element name="ID" nillable="false" type="xsd:int"/>
+ <xsd:element name="Product" type="xsd:string"/>
+ <xsd:element name="Quantity" type="xsd:int"/>
+ <xsd:element name="Customer_ID" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+
+</xsd:schema>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerMapping.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerMapping.xml
new file mode 100644
index 0000000000..f72f4cf1b1
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerMapping.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER" propertyName="Customer">
+ <Column name="ID" propertyName="id" primaryKey="true"/>
+ <Column name="LASTNAME" propertyName="lastname"/>
+ <Column name="ADDRESS" propertyName="address"/>
+ </Table>
+
+</Config>
diff --git a/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerOrderRelationshipMapping.xml b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerOrderRelationshipMapping.xml
new file mode 100644
index 0000000000..14b6302e72
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-final/java/das/rdb/src/test/resources/customerOrderRelationshipMapping.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <Table name="CUSTOMER">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+ <Table name="ANORDER">
+ <Column name="ID" primaryKey="true"/>
+ </Table>
+
+ <Relationship name="orders" primaryKeyTable="CUSTOMER" foreignKeyTable="ANORDER" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
+ </Relationship>
+
+</Config>
+