From d0e86aec253c57f94e4ebcdb2c417a825daafe3b Mon Sep 17 00:00:00 2001 From: lresende Date: Mon, 2 Nov 2009 22:22:47 +0000 Subject: moving das branches git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@832145 13f79535-47bb-0310-9956-ffa450edef68 --- branches/das-java-M2/BUILDING.txt | 58 - branches/das-java-M2/LICENSE.txt | 202 - branches/das-java-M2/NOTICE.txt | 32 - branches/das-java-M2/README.txt | 10 - branches/das-java-M2/RELEASE_NOTES.txt | 53 - branches/das-java-M2/STATUS.txt | 73 - .../das-java-M2/distribution/binary/LICENSE.txt | 202 - .../das-java-M2/distribution/binary/NOTICE.txt | 32 - .../das-java-M2/distribution/binary/README.txt | 10 - .../distribution/binary/RELEASE_NOTES.txt | 53 - .../das-java-M2/distribution/binary/STATUS.txt | 73 - branches/das-java-M2/distribution/binary/pom.xml | 63 - .../distribution/binary/src/main/assembly/das.xml | 48 - .../das-java-M2/distribution/samples/LICENSE.txt | 202 - .../das-java-M2/distribution/samples/NOTICE.txt | 32 - .../distribution/samples/RELEASE_NOTES.txt | 53 - .../das-java-M2/distribution/samples/STATUS.txt | 73 - branches/das-java-M2/distribution/samples/pom.xml | 64 - .../samples/src/main/assembly/das-samples.xml | 77 - branches/das-java-M2/pom.xml | 122 - branches/das-java-M2/rdb/pom.xml | 110 - .../java/org/apache/tuscany/das/rdb/Command.java | 68 - .../org/apache/tuscany/das/rdb/ConfigHelper.java | 108 - .../java/org/apache/tuscany/das/rdb/Converter.java | 54 - .../main/java/org/apache/tuscany/das/rdb/DAS.java | 67 - .../org/apache/tuscany/das/rdb/DASFactory.java | 76 - .../java/org/apache/tuscany/das/rdb/Pager.java | 64 - .../das/rdb/config/wrapper/MappingWrapper.java | 491 --- .../das/rdb/config/wrapper/QualifiedColumn.java | 49 - .../rdb/config/wrapper/RelationshipWrapper.java | 47 - .../das/rdb/config/wrapper/TableWrapper.java | 145 - .../das/rdb/generator/impl/BaseGenerator.java | 36 - .../das/rdb/generator/impl/DeleteGenerator.java | 84 - .../das/rdb/generator/impl/InsertGenerator.java | 159 - .../das/rdb/generator/impl/UpdateGenerator.java | 194 - .../das/rdb/graphbuilder/impl/DataObjectMaker.java | 121 - .../rdb/graphbuilder/impl/DefaultConverter.java | 84 - .../graphbuilder/impl/GraphBuilderMetadata.java | 247 -- .../rdb/graphbuilder/impl/MultiTableRegistry.java | 105 - .../das/rdb/graphbuilder/impl/ResultMetadata.java | 285 -- .../rdb/graphbuilder/impl/ResultSetProcessor.java | 141 - .../das/rdb/graphbuilder/impl/ResultSetRow.java | 186 - .../das/rdb/graphbuilder/impl/RowObjects.java | 146 - .../rdb/graphbuilder/impl/SingleTableRegistry.java | 48 - .../das/rdb/graphbuilder/impl/TableData.java | 86 - .../das/rdb/graphbuilder/impl/TableRegistry.java | 47 - .../rdb/graphbuilder/schema/ResultSetTypeMap.java | 138 - .../das/rdb/impl/ApplyChangesCommandImpl.java | 80 - .../tuscany/das/rdb/impl/BaseCommandImpl.java | 50 - .../apache/tuscany/das/rdb/impl/ChangeFactory.java | 179 - .../tuscany/das/rdb/impl/ChangeOperation.java | 88 - .../tuscany/das/rdb/impl/ChangeSummarizer.java | 242 - .../org/apache/tuscany/das/rdb/impl/Changes.java | 82 - .../apache/tuscany/das/rdb/impl/CommandImpl.java | 99 - .../tuscany/das/rdb/impl/ConnectionImpl.java | 126 - .../tuscany/das/rdb/impl/CreateOperation.java | 30 - .../tuscany/das/rdb/impl/DASFactoryImpl.java | 50 - .../org/apache/tuscany/das/rdb/impl/DASImpl.java | 247 -- .../tuscany/das/rdb/impl/DatabaseObject.java | 162 - .../tuscany/das/rdb/impl/DeleteCommandImpl.java | 34 - .../apache/tuscany/das/rdb/impl/DeleteList.java | 77 - .../tuscany/das/rdb/impl/DeleteOperation.java | 38 - .../tuscany/das/rdb/impl/FactoryRegistry.java | 58 - .../tuscany/das/rdb/impl/InsertCommandImpl.java | 66 - .../apache/tuscany/das/rdb/impl/InsertList.java | 96 - .../tuscany/das/rdb/impl/ManagedParameterImpl.java | 39 - .../das/rdb/impl/OptimisticWriteCommandImpl.java | 56 - .../org/apache/tuscany/das/rdb/impl/PagerImpl.java | 69 - .../apache/tuscany/das/rdb/impl/ParameterImpl.java | 120 - .../apache/tuscany/das/rdb/impl/Parameters.java | 114 - .../tuscany/das/rdb/impl/ReadCommandImpl.java | 124 - .../tuscany/das/rdb/impl/ResultSetShape.java | 123 - .../tuscany/das/rdb/impl/SDODataTypeHelper.java | 109 - .../apache/tuscany/das/rdb/impl/SDODataTypes.java | 98 - .../apache/tuscany/das/rdb/impl/SPCommandImpl.java | 101 - .../org/apache/tuscany/das/rdb/impl/Statement.java | 234 - .../tuscany/das/rdb/impl/UpdateCommandImpl.java | 34 - .../apache/tuscany/das/rdb/impl/UpdateList.java | 45 - .../tuscany/das/rdb/impl/UpdateOperation.java | 32 - .../tuscany/das/rdb/impl/WriteCommandImpl.java | 85 - .../tuscany/das/rdb/merge/impl/GraphMerger.java | 195 - .../apache/tuscany/das/rdb/util/ConfigUtil.java | 58 - .../tuscany/das/rdb/util/DataObjectUtil.java | 79 - .../apache/tuscany/das/rdb/util/LoggerFactory.java | 79 - .../apache/tuscany/das/rdb/util/LoggerLayout.java | 56 - .../rdb/src/main/resources/META-INF/LICENSE.txt | 1277 ------ .../rdb/src/main/resources/META-INF/MANIFEST.MF | 13 - .../rdb/src/main/resources/META-INF/NOTICE | 18 - .../rdb/src/main/resources/META-INF/README.txt | 35 - .../das-java-M2/rdb/src/main/resources/config.xsd | 112 - .../rdb/src/main/resources/dasmodel4.mdl | 4622 -------------------- .../apache/tuscany/das/rdb/test/AliasTests.java | 162 - .../tuscany/das/rdb/test/BestPracticeTests.java | 153 - .../apache/tuscany/das/rdb/test/CUDGeneration.java | 111 - .../tuscany/das/rdb/test/CommandGroupTests.java | 161 - .../apache/tuscany/das/rdb/test/CompanyTests.java | 101 - .../tuscany/das/rdb/test/CompoundKeyTests.java | 109 - .../tuscany/das/rdb/test/ConverterTests.java | 157 - .../tuscany/das/rdb/test/CorrectedDefectTests.java | 304 -- .../das/rdb/test/CrudWithChangeHistory.java | 350 -- .../apache/tuscany/das/rdb/test/DefectTests.java | 106 - .../tuscany/das/rdb/test/ExceptionTests.java | 149 - .../das/rdb/test/GeneratedCommandTests.java | 94 - .../apache/tuscany/das/rdb/test/GeneratedId.java | 293 -- .../tuscany/das/rdb/test/GraphMergeTests.java | 188 - .../das/rdb/test/ImpliedRelationshipTests.java | 112 - .../apache/tuscany/das/rdb/test/KennelTests.java | 123 - .../org/apache/tuscany/das/rdb/test/OCCTests.java | 131 - .../das/rdb/test/OneToOneRelationshipTests.java | 174 - .../das/rdb/test/OperationOrderingTests.java | 116 - .../org/apache/tuscany/das/rdb/test/Paging.java | 100 - .../tuscany/das/rdb/test/PartialUpdateTests.java | 99 - .../das/rdb/test/PassiveConnectionTests.java | 94 - .../das/rdb/test/ProgrammaticConfigTests.java | 299 -- .../tuscany/das/rdb/test/ReadDBSchemaTests.java | 55 - .../tuscany/das/rdb/test/RecursiveTests.java | 71 - .../tuscany/das/rdb/test/RelationshipTests.java | 113 - .../tuscany/das/rdb/test/ResultSetShapeTests.java | 93 - .../tuscany/das/rdb/test/SerializationTests.java | 76 - .../apache/tuscany/das/rdb/test/SimplestCrud.java | 228 - .../apache/tuscany/das/rdb/test/StoredProcs.java | 142 - .../org/apache/tuscany/das/rdb/test/TopDown.java | 73 - .../org/apache/tuscany/das/rdb/test/TypeTests.java | 90 - .../commands/ReadCustomersByLastnameCommand.java | 56 - .../rdb/test/commands/ReadCustomersCommand.java | 57 - .../commands/ReadCustomersStaticTypesCommand.java | 60 - .../commands/ReadCustomersWithShapeCommand.java | 63 - .../SimpleReadCustomersWithShapeCommand.java | 83 - .../apache/tuscany/das/rdb/test/data/BookData.java | 46 - .../apache/tuscany/das/rdb/test/data/CityData.java | 54 - .../tuscany/das/rdb/test/data/CompanyData.java | 44 - .../tuscany/das/rdb/test/data/CompanyDeptData.java | 41 - .../tuscany/das/rdb/test/data/CompanyEmpData.java | 45 - .../tuscany/das/rdb/test/data/CustomerData.java | 39 - .../tuscany/das/rdb/test/data/DepEmpData.java | 43 - .../tuscany/das/rdb/test/data/DepartmentData.java | 43 - .../apache/tuscany/das/rdb/test/data/DogData.java | 54 - .../tuscany/das/rdb/test/data/EmployeeData.java | 44 - .../tuscany/das/rdb/test/data/KennelData.java | 53 - .../tuscany/das/rdb/test/data/OrderData.java | 41 - .../das/rdb/test/data/OrderDetailsData.java | 43 - .../tuscany/das/rdb/test/data/OwnerData.java | 53 - .../tuscany/das/rdb/test/data/OwnerDogData.java | 41 - .../apache/tuscany/das/rdb/test/data/PartData.java | 48 - .../tuscany/das/rdb/test/data/StateData.java | 48 - .../tuscany/das/rdb/test/data/TypesData.java | 38 - .../tuscany/das/rdb/test/data/VisitData.java | 52 - .../tuscany/das/rdb/test/framework/DB2Setup.java | 37 - .../tuscany/das/rdb/test/framework/DasTest.java | 147 - .../das/rdb/test/framework/DatabaseSetup.java | 410 -- .../tuscany/das/rdb/test/framework/DerbySetup.java | 44 - .../das/rdb/test/framework/JavaStoredProcs.java | 97 - .../tuscany/das/rdb/test/framework/MySQLSetup.java | 98 - .../das/rdb/test/framework/RelationshipData.java | 80 - .../tuscany/das/rdb/test/framework/TestData.java | 126 - .../framework/TestDataWithExplicitColumns.java | 88 - .../test/mappings/IntegerToBooleanConverter.java | 43 - .../test/mappings/SillyDateStringConverter.java | 77 - .../test/mappings/StringToIntegerConverter.java | 39 - .../rdb/test/mappings/StringToLongConverter.java | 37 - .../das/rdb/test/suites/AllCommonTests.java | 109 - .../tuscany/das/rdb/test/suites/AllTestsDB2.java | 44 - .../tuscany/das/rdb/test/suites/AllTestsDerby.java | 35 - .../tuscany/das/rdb/test/suites/AllTestsMySQL.java | 39 - .../das/rdb/test/typed/SimplestStaticCrud.java | 56 - .../rdb/src/test/resources/1xM_mapping_no_cud.xml | 37 - .../rdb/src/test/resources/BooksConfig.xml | 30 - .../src/test/resources/BooksConfigWithAlias.xml | 36 - .../rdb/src/test/resources/CompanyConfig.xml | 43 - .../src/test/resources/CompanyEmployeeConfig.xml | 54 - .../test/resources/CustomerConfigWithConverter.xml | 34 - .../resources/CustomerConfigWithIDConverter.xml | 32 - .../src/test/resources/CustomersOrdersConfig.xml | 51 - .../rdb/src/test/resources/InvalidConfig1.xml | 33 - .../rdb/src/test/resources/InvalidConverter.xml | 38 - .../rdb/src/test/resources/ManagedBooksConfig.xml | 30 - .../test/resources/OneToOneRestrictedConfig.xml | 54 - .../test/resources/OrdersOrderDetailsConfig.xml | 36 - .../rdb/src/test/resources/PartsConfig.xml | 50 - .../resources/basicCompanyDepartmentMapping.xml | 39 - .../rdb/src/test/resources/basicCompanyMapping.xml | 25 - .../src/test/resources/basicCustomerMapping.xml | 29 - .../test/resources/basicCustomerMappingWithCUD.xml | 28 - .../resources/basicCustomerMappingWithCUD2.xml | 31 - .../basicCustomerMappingWithInvalidCUD.xml | 32 - .../test/resources/basicCustomerOrderMapping.xml | 35 - .../rdb/src/test/resources/basicStaticCustomer.xml | 30 - .../rdb/src/test/resources/cityStates.xml | 40 - .../das-java-M2/rdb/src/test/resources/company.xsd | 48 - .../rdb/src/test/resources/companyMapping.xml | 42 - .../resources/companyMappingWithConverters.xml | 46 - .../rdb/src/test/resources/customer.xsd | 43 - .../rdb/src/test/resources/customerMapping.xml | 28 - .../resources/customerOrderRelationshipMapping.xml | 34 - .../rdb/src/test/resources/passiveConnection.xml | 26 - .../rdb/src/test/resources/staticCustomer.xml | 25 - .../rdb/src/test/resources/staticCustomerOrder.xml | 38 - .../rdb/src/test/resources/staticInvalid.xml | 25 - .../rdb/src/test/resources/storedProcTest.xml | 27 - branches/das-java-M2/samples/build.xml | 29 - branches/das-java-M2/samples/companyweb/build.xml | 55 - .../das-java-M2/samples/companyweb/dastest/db.lck | Bin 38 -> 0 bytes .../samples/companyweb/dastest/log/log.ctrl | Bin 48 -> 0 bytes .../samples/companyweb/dastest/log/log1.dat | Bin 1048576 -> 0 bytes .../samples/companyweb/dastest/log/logmirror.ctrl | Bin 48 -> 0 bytes .../samples/companyweb/dastest/seg0/c10.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c101.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c111.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c121.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c130.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c141.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c150.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c161.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c171.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c180.dat | Bin 24576 -> 0 bytes .../samples/companyweb/dastest/seg0/c191.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c1a1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c1b1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c1c0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c1d1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c1e0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c1f1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c20.dat | Bin 24576 -> 0 bytes .../samples/companyweb/dastest/seg0/c200.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c211.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c221.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c230.dat | Bin 86016 -> 0 bytes .../samples/companyweb/dastest/seg0/c241.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c251.dat | Bin 12288 -> 0 bytes .../samples/companyweb/dastest/seg0/c260.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c271.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c281.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c290.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c2a1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c2b1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c2c1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c2d0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c2e1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c2f0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c300.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c31.dat | Bin 16384 -> 0 bytes .../samples/companyweb/dastest/seg0/c311.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c320.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c331.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c340.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c351.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c360.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c371.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c380.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c391.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c3a0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c3b1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c3c0.dat | Bin 24576 -> 0 bytes .../samples/companyweb/dastest/seg0/c3d1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c3e0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c3f1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c400.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c41.dat | Bin 16384 -> 0 bytes .../samples/companyweb/dastest/seg0/c411.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c420.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c431.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c440.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c451.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c460.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c471.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c481.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c490.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c4a1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c51.dat | Bin 16384 -> 0 bytes .../samples/companyweb/dastest/seg0/c60.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c71.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c81.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/c90.dat | Bin 20480 -> 0 bytes .../samples/companyweb/dastest/seg0/ca1.dat | Bin 24576 -> 0 bytes .../samples/companyweb/dastest/seg0/cb1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/cc0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/cd1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/ce1.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/seg0/cf0.dat | Bin 8192 -> 0 bytes .../samples/companyweb/dastest/service.properties | 22 - branches/das-java-M2/samples/companyweb/pom.xml | 57 - branches/das-java-M2/samples/companyweb/readme.htm | 654 --- .../samples/das/companyweb/CompanyClient.java | 151 - .../src/main/resources/CompanyConfig.xml | 46 - .../src/main/resources/META-INF/LICENSE.txt | 202 - .../companyweb/src/main/resources/META-INF/NOTICE | 32 - .../src/main/resources/META-INF/README.txt | 35 - .../companyweb/src/main/resources/log4j.properties | 29 - .../samples/companyweb/src/main/webapp/Company.jsp | 158 - .../src/main/webapp/META-INF/context.xml | 25 - .../companyweb/src/main/webapp/WEB-INF/web.xml | 30 - branches/das-java-M2/samples/pom.xml | 36 - .../das-java-M2/samples/testing/tomcat/build.xml | 291 -- .../samples/testing/tomcat/companyweb/pom.xml | 80 - .../src/main/resources/META-INF/LICENSE.txt | 1277 ------ .../companyweb/src/main/resources/META-INF/NOTICE | 18 - .../src/main/resources/META-INF/README.txt | 35 - .../org/apache/tuscany/test/das/DasTestCase.java | 249 -- .../das-java-M2/samples/testing/tomcat/context.xsl | 51 - .../samples/testing/tomcat/datasource.xsl | 39 - .../das-java-M2/samples/testing/tomcat/pom.xml | 113 - .../das-java-M2/samples/testing/tomcat/readme.htm | 71 - .../das-java-M2/samples/testing/tomcat/server.xsl | 51 - das-java/branches/das-java-M2/BUILDING.txt | 58 + das-java/branches/das-java-M2/LICENSE.txt | 202 + das-java/branches/das-java-M2/NOTICE.txt | 32 + das-java/branches/das-java-M2/README.txt | 10 + das-java/branches/das-java-M2/RELEASE_NOTES.txt | 53 + das-java/branches/das-java-M2/STATUS.txt | 73 + .../das-java-M2/distribution/binary/LICENSE.txt | 202 + .../das-java-M2/distribution/binary/NOTICE.txt | 32 + .../das-java-M2/distribution/binary/README.txt | 10 + .../distribution/binary/RELEASE_NOTES.txt | 53 + .../das-java-M2/distribution/binary/STATUS.txt | 73 + .../das-java-M2/distribution/binary/pom.xml | 63 + .../distribution/binary/src/main/assembly/das.xml | 48 + .../das-java-M2/distribution/samples/LICENSE.txt | 202 + .../das-java-M2/distribution/samples/NOTICE.txt | 32 + .../distribution/samples/RELEASE_NOTES.txt | 53 + .../das-java-M2/distribution/samples/STATUS.txt | 73 + .../das-java-M2/distribution/samples/pom.xml | 64 + .../samples/src/main/assembly/das-samples.xml | 77 + das-java/branches/das-java-M2/pom.xml | 122 + das-java/branches/das-java-M2/rdb/pom.xml | 110 + .../java/org/apache/tuscany/das/rdb/Command.java | 68 + .../org/apache/tuscany/das/rdb/ConfigHelper.java | 108 + .../java/org/apache/tuscany/das/rdb/Converter.java | 54 + .../main/java/org/apache/tuscany/das/rdb/DAS.java | 67 + .../org/apache/tuscany/das/rdb/DASFactory.java | 76 + .../java/org/apache/tuscany/das/rdb/Pager.java | 64 + .../das/rdb/config/wrapper/MappingWrapper.java | 491 +++ .../das/rdb/config/wrapper/QualifiedColumn.java | 49 + .../rdb/config/wrapper/RelationshipWrapper.java | 47 + .../das/rdb/config/wrapper/TableWrapper.java | 145 + .../das/rdb/generator/impl/BaseGenerator.java | 36 + .../das/rdb/generator/impl/DeleteGenerator.java | 84 + .../das/rdb/generator/impl/InsertGenerator.java | 159 + .../das/rdb/generator/impl/UpdateGenerator.java | 194 + .../das/rdb/graphbuilder/impl/DataObjectMaker.java | 121 + .../rdb/graphbuilder/impl/DefaultConverter.java | 84 + .../graphbuilder/impl/GraphBuilderMetadata.java | 247 ++ .../rdb/graphbuilder/impl/MultiTableRegistry.java | 105 + .../das/rdb/graphbuilder/impl/ResultMetadata.java | 285 ++ .../rdb/graphbuilder/impl/ResultSetProcessor.java | 141 + .../das/rdb/graphbuilder/impl/ResultSetRow.java | 186 + .../das/rdb/graphbuilder/impl/RowObjects.java | 146 + .../rdb/graphbuilder/impl/SingleTableRegistry.java | 48 + .../das/rdb/graphbuilder/impl/TableData.java | 86 + .../das/rdb/graphbuilder/impl/TableRegistry.java | 47 + .../rdb/graphbuilder/schema/ResultSetTypeMap.java | 138 + .../das/rdb/impl/ApplyChangesCommandImpl.java | 80 + .../tuscany/das/rdb/impl/BaseCommandImpl.java | 50 + .../apache/tuscany/das/rdb/impl/ChangeFactory.java | 179 + .../tuscany/das/rdb/impl/ChangeOperation.java | 88 + .../tuscany/das/rdb/impl/ChangeSummarizer.java | 242 + .../org/apache/tuscany/das/rdb/impl/Changes.java | 82 + .../apache/tuscany/das/rdb/impl/CommandImpl.java | 99 + .../tuscany/das/rdb/impl/ConnectionImpl.java | 126 + .../tuscany/das/rdb/impl/CreateOperation.java | 30 + .../tuscany/das/rdb/impl/DASFactoryImpl.java | 50 + .../org/apache/tuscany/das/rdb/impl/DASImpl.java | 247 ++ .../tuscany/das/rdb/impl/DatabaseObject.java | 162 + .../tuscany/das/rdb/impl/DeleteCommandImpl.java | 34 + .../apache/tuscany/das/rdb/impl/DeleteList.java | 77 + .../tuscany/das/rdb/impl/DeleteOperation.java | 38 + .../tuscany/das/rdb/impl/FactoryRegistry.java | 58 + .../tuscany/das/rdb/impl/InsertCommandImpl.java | 66 + .../apache/tuscany/das/rdb/impl/InsertList.java | 96 + .../tuscany/das/rdb/impl/ManagedParameterImpl.java | 39 + .../das/rdb/impl/OptimisticWriteCommandImpl.java | 56 + .../org/apache/tuscany/das/rdb/impl/PagerImpl.java | 69 + .../apache/tuscany/das/rdb/impl/ParameterImpl.java | 120 + .../apache/tuscany/das/rdb/impl/Parameters.java | 114 + .../tuscany/das/rdb/impl/ReadCommandImpl.java | 124 + .../tuscany/das/rdb/impl/ResultSetShape.java | 123 + .../tuscany/das/rdb/impl/SDODataTypeHelper.java | 109 + .../apache/tuscany/das/rdb/impl/SDODataTypes.java | 98 + .../apache/tuscany/das/rdb/impl/SPCommandImpl.java | 101 + .../org/apache/tuscany/das/rdb/impl/Statement.java | 234 + .../tuscany/das/rdb/impl/UpdateCommandImpl.java | 34 + .../apache/tuscany/das/rdb/impl/UpdateList.java | 45 + .../tuscany/das/rdb/impl/UpdateOperation.java | 32 + .../tuscany/das/rdb/impl/WriteCommandImpl.java | 85 + .../tuscany/das/rdb/merge/impl/GraphMerger.java | 195 + .../apache/tuscany/das/rdb/util/ConfigUtil.java | 58 + .../tuscany/das/rdb/util/DataObjectUtil.java | 79 + .../apache/tuscany/das/rdb/util/LoggerFactory.java | 79 + .../apache/tuscany/das/rdb/util/LoggerLayout.java | 56 + .../rdb/src/main/resources/META-INF/LICENSE.txt | 1277 ++++++ .../rdb/src/main/resources/META-INF/MANIFEST.MF | 13 + .../rdb/src/main/resources/META-INF/NOTICE | 18 + .../rdb/src/main/resources/META-INF/README.txt | 35 + .../das-java-M2/rdb/src/main/resources/config.xsd | 112 + .../rdb/src/main/resources/dasmodel4.mdl | 4622 ++++++++++++++++++++ .../apache/tuscany/das/rdb/test/AliasTests.java | 162 + .../tuscany/das/rdb/test/BestPracticeTests.java | 153 + .../apache/tuscany/das/rdb/test/CUDGeneration.java | 111 + .../tuscany/das/rdb/test/CommandGroupTests.java | 161 + .../apache/tuscany/das/rdb/test/CompanyTests.java | 101 + .../tuscany/das/rdb/test/CompoundKeyTests.java | 109 + .../tuscany/das/rdb/test/ConverterTests.java | 157 + .../tuscany/das/rdb/test/CorrectedDefectTests.java | 304 ++ .../das/rdb/test/CrudWithChangeHistory.java | 350 ++ .../apache/tuscany/das/rdb/test/DefectTests.java | 106 + .../tuscany/das/rdb/test/ExceptionTests.java | 149 + .../das/rdb/test/GeneratedCommandTests.java | 94 + .../apache/tuscany/das/rdb/test/GeneratedId.java | 293 ++ .../tuscany/das/rdb/test/GraphMergeTests.java | 188 + .../das/rdb/test/ImpliedRelationshipTests.java | 112 + .../apache/tuscany/das/rdb/test/KennelTests.java | 123 + .../org/apache/tuscany/das/rdb/test/OCCTests.java | 131 + .../das/rdb/test/OneToOneRelationshipTests.java | 174 + .../das/rdb/test/OperationOrderingTests.java | 116 + .../org/apache/tuscany/das/rdb/test/Paging.java | 100 + .../tuscany/das/rdb/test/PartialUpdateTests.java | 99 + .../das/rdb/test/PassiveConnectionTests.java | 94 + .../das/rdb/test/ProgrammaticConfigTests.java | 299 ++ .../tuscany/das/rdb/test/ReadDBSchemaTests.java | 55 + .../tuscany/das/rdb/test/RecursiveTests.java | 71 + .../tuscany/das/rdb/test/RelationshipTests.java | 113 + .../tuscany/das/rdb/test/ResultSetShapeTests.java | 93 + .../tuscany/das/rdb/test/SerializationTests.java | 76 + .../apache/tuscany/das/rdb/test/SimplestCrud.java | 228 + .../apache/tuscany/das/rdb/test/StoredProcs.java | 142 + .../org/apache/tuscany/das/rdb/test/TopDown.java | 73 + .../org/apache/tuscany/das/rdb/test/TypeTests.java | 90 + .../commands/ReadCustomersByLastnameCommand.java | 56 + .../rdb/test/commands/ReadCustomersCommand.java | 57 + .../commands/ReadCustomersStaticTypesCommand.java | 60 + .../commands/ReadCustomersWithShapeCommand.java | 63 + .../SimpleReadCustomersWithShapeCommand.java | 83 + .../apache/tuscany/das/rdb/test/data/BookData.java | 46 + .../apache/tuscany/das/rdb/test/data/CityData.java | 54 + .../tuscany/das/rdb/test/data/CompanyData.java | 44 + .../tuscany/das/rdb/test/data/CompanyDeptData.java | 41 + .../tuscany/das/rdb/test/data/CompanyEmpData.java | 45 + .../tuscany/das/rdb/test/data/CustomerData.java | 39 + .../tuscany/das/rdb/test/data/DepEmpData.java | 43 + .../tuscany/das/rdb/test/data/DepartmentData.java | 43 + .../apache/tuscany/das/rdb/test/data/DogData.java | 54 + .../tuscany/das/rdb/test/data/EmployeeData.java | 44 + .../tuscany/das/rdb/test/data/KennelData.java | 53 + .../tuscany/das/rdb/test/data/OrderData.java | 41 + .../das/rdb/test/data/OrderDetailsData.java | 43 + .../tuscany/das/rdb/test/data/OwnerData.java | 53 + .../tuscany/das/rdb/test/data/OwnerDogData.java | 41 + .../apache/tuscany/das/rdb/test/data/PartData.java | 48 + .../tuscany/das/rdb/test/data/StateData.java | 48 + .../tuscany/das/rdb/test/data/TypesData.java | 38 + .../tuscany/das/rdb/test/data/VisitData.java | 52 + .../tuscany/das/rdb/test/framework/DB2Setup.java | 37 + .../tuscany/das/rdb/test/framework/DasTest.java | 147 + .../das/rdb/test/framework/DatabaseSetup.java | 410 ++ .../tuscany/das/rdb/test/framework/DerbySetup.java | 44 + .../das/rdb/test/framework/JavaStoredProcs.java | 97 + .../tuscany/das/rdb/test/framework/MySQLSetup.java | 98 + .../das/rdb/test/framework/RelationshipData.java | 80 + .../tuscany/das/rdb/test/framework/TestData.java | 126 + .../framework/TestDataWithExplicitColumns.java | 88 + .../test/mappings/IntegerToBooleanConverter.java | 43 + .../test/mappings/SillyDateStringConverter.java | 77 + .../test/mappings/StringToIntegerConverter.java | 39 + .../rdb/test/mappings/StringToLongConverter.java | 37 + .../das/rdb/test/suites/AllCommonTests.java | 109 + .../tuscany/das/rdb/test/suites/AllTestsDB2.java | 44 + .../tuscany/das/rdb/test/suites/AllTestsDerby.java | 35 + .../tuscany/das/rdb/test/suites/AllTestsMySQL.java | 39 + .../das/rdb/test/typed/SimplestStaticCrud.java | 56 + .../rdb/src/test/resources/1xM_mapping_no_cud.xml | 37 + .../rdb/src/test/resources/BooksConfig.xml | 30 + .../src/test/resources/BooksConfigWithAlias.xml | 36 + .../rdb/src/test/resources/CompanyConfig.xml | 43 + .../src/test/resources/CompanyEmployeeConfig.xml | 54 + .../test/resources/CustomerConfigWithConverter.xml | 34 + .../resources/CustomerConfigWithIDConverter.xml | 32 + .../src/test/resources/CustomersOrdersConfig.xml | 51 + .../rdb/src/test/resources/InvalidConfig1.xml | 33 + .../rdb/src/test/resources/InvalidConverter.xml | 38 + .../rdb/src/test/resources/ManagedBooksConfig.xml | 30 + .../test/resources/OneToOneRestrictedConfig.xml | 54 + .../test/resources/OrdersOrderDetailsConfig.xml | 36 + .../rdb/src/test/resources/PartsConfig.xml | 50 + .../resources/basicCompanyDepartmentMapping.xml | 39 + .../rdb/src/test/resources/basicCompanyMapping.xml | 25 + .../src/test/resources/basicCustomerMapping.xml | 29 + .../test/resources/basicCustomerMappingWithCUD.xml | 28 + .../resources/basicCustomerMappingWithCUD2.xml | 31 + .../basicCustomerMappingWithInvalidCUD.xml | 32 + .../test/resources/basicCustomerOrderMapping.xml | 35 + .../rdb/src/test/resources/basicStaticCustomer.xml | 30 + .../rdb/src/test/resources/cityStates.xml | 40 + .../das-java-M2/rdb/src/test/resources/company.xsd | 48 + .../rdb/src/test/resources/companyMapping.xml | 42 + .../resources/companyMappingWithConverters.xml | 46 + .../rdb/src/test/resources/customer.xsd | 43 + .../rdb/src/test/resources/customerMapping.xml | 28 + .../resources/customerOrderRelationshipMapping.xml | 34 + .../rdb/src/test/resources/passiveConnection.xml | 26 + .../rdb/src/test/resources/staticCustomer.xml | 25 + .../rdb/src/test/resources/staticCustomerOrder.xml | 38 + .../rdb/src/test/resources/staticInvalid.xml | 25 + .../rdb/src/test/resources/storedProcTest.xml | 27 + das-java/branches/das-java-M2/samples/build.xml | 29 + .../das-java-M2/samples/companyweb/build.xml | 55 + .../das-java-M2/samples/companyweb/dastest/db.lck | Bin 0 -> 38 bytes .../samples/companyweb/dastest/log/log.ctrl | Bin 0 -> 48 bytes .../samples/companyweb/dastest/log/log1.dat | Bin 0 -> 1048576 bytes .../samples/companyweb/dastest/log/logmirror.ctrl | Bin 0 -> 48 bytes .../samples/companyweb/dastest/seg0/c10.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c101.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c111.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c121.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c130.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c141.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c150.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c161.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c171.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c180.dat | Bin 0 -> 24576 bytes .../samples/companyweb/dastest/seg0/c191.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c1a1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c1b1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c1c0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c1d1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c1e0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c1f1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c20.dat | Bin 0 -> 24576 bytes .../samples/companyweb/dastest/seg0/c200.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c211.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c221.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c230.dat | Bin 0 -> 86016 bytes .../samples/companyweb/dastest/seg0/c241.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c251.dat | Bin 0 -> 12288 bytes .../samples/companyweb/dastest/seg0/c260.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c271.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c281.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c290.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c2a1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c2b1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c2c1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c2d0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c2e1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c2f0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c300.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c31.dat | Bin 0 -> 16384 bytes .../samples/companyweb/dastest/seg0/c311.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c320.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c331.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c340.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c351.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c360.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c371.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c380.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c391.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c3a0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c3b1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c3c0.dat | Bin 0 -> 24576 bytes .../samples/companyweb/dastest/seg0/c3d1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c3e0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c3f1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c400.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c41.dat | Bin 0 -> 16384 bytes .../samples/companyweb/dastest/seg0/c411.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c420.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c431.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c440.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c451.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c460.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c471.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c481.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c490.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c4a1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c51.dat | Bin 0 -> 16384 bytes .../samples/companyweb/dastest/seg0/c60.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c71.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c81.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/c90.dat | Bin 0 -> 20480 bytes .../samples/companyweb/dastest/seg0/ca1.dat | Bin 0 -> 24576 bytes .../samples/companyweb/dastest/seg0/cb1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/cc0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/cd1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/ce1.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/seg0/cf0.dat | Bin 0 -> 8192 bytes .../samples/companyweb/dastest/service.properties | 22 + .../das-java-M2/samples/companyweb/pom.xml | 57 + .../das-java-M2/samples/companyweb/readme.htm | 654 +++ .../samples/das/companyweb/CompanyClient.java | 151 + .../src/main/resources/CompanyConfig.xml | 46 + .../src/main/resources/META-INF/LICENSE.txt | 202 + .../companyweb/src/main/resources/META-INF/NOTICE | 32 + .../src/main/resources/META-INF/README.txt | 35 + .../companyweb/src/main/resources/log4j.properties | 29 + .../samples/companyweb/src/main/webapp/Company.jsp | 158 + .../src/main/webapp/META-INF/context.xml | 25 + .../companyweb/src/main/webapp/WEB-INF/web.xml | 30 + das-java/branches/das-java-M2/samples/pom.xml | 36 + .../das-java-M2/samples/testing/tomcat/build.xml | 291 ++ .../samples/testing/tomcat/companyweb/pom.xml | 80 + .../src/main/resources/META-INF/LICENSE.txt | 1277 ++++++ .../companyweb/src/main/resources/META-INF/NOTICE | 18 + .../src/main/resources/META-INF/README.txt | 35 + .../org/apache/tuscany/test/das/DasTestCase.java | 249 ++ .../das-java-M2/samples/testing/tomcat/context.xsl | 51 + .../samples/testing/tomcat/datasource.xsl | 39 + .../das-java-M2/samples/testing/tomcat/pom.xml | 113 + .../das-java-M2/samples/testing/tomcat/readme.htm | 71 + .../das-java-M2/samples/testing/tomcat/server.xsl | 51 + 606 files changed, 27136 insertions(+), 27136 deletions(-) delete mode 100644 branches/das-java-M2/BUILDING.txt delete mode 100644 branches/das-java-M2/LICENSE.txt delete mode 100644 branches/das-java-M2/NOTICE.txt delete mode 100644 branches/das-java-M2/README.txt delete mode 100644 branches/das-java-M2/RELEASE_NOTES.txt delete mode 100644 branches/das-java-M2/STATUS.txt delete mode 100644 branches/das-java-M2/distribution/binary/LICENSE.txt delete mode 100644 branches/das-java-M2/distribution/binary/NOTICE.txt delete mode 100644 branches/das-java-M2/distribution/binary/README.txt delete mode 100644 branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt delete mode 100644 branches/das-java-M2/distribution/binary/STATUS.txt delete mode 100644 branches/das-java-M2/distribution/binary/pom.xml delete mode 100644 branches/das-java-M2/distribution/binary/src/main/assembly/das.xml delete mode 100644 branches/das-java-M2/distribution/samples/LICENSE.txt delete mode 100644 branches/das-java-M2/distribution/samples/NOTICE.txt delete mode 100644 branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt delete mode 100644 branches/das-java-M2/distribution/samples/STATUS.txt delete mode 100644 branches/das-java-M2/distribution/samples/pom.xml delete mode 100644 branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml delete mode 100644 branches/das-java-M2/pom.xml delete mode 100644 branches/das-java-M2/rdb/pom.xml delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java delete mode 100644 branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java delete mode 100644 branches/das-java-M2/rdb/src/main/resources/META-INF/LICENSE.txt delete mode 100644 branches/das-java-M2/rdb/src/main/resources/META-INF/MANIFEST.MF delete mode 100644 branches/das-java-M2/rdb/src/main/resources/META-INF/NOTICE delete mode 100644 branches/das-java-M2/rdb/src/main/resources/META-INF/README.txt delete mode 100644 branches/das-java-M2/rdb/src/main/resources/config.xsd delete mode 100644 branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java delete mode 100644 branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java delete mode 100644 branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/cityStates.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/company.xsd delete mode 100644 branches/das-java-M2/rdb/src/test/resources/companyMapping.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/customer.xsd delete mode 100644 branches/das-java-M2/rdb/src/test/resources/customerMapping.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml delete mode 100644 branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml delete mode 100644 branches/das-java-M2/samples/build.xml delete mode 100644 branches/das-java-M2/samples/companyweb/build.xml delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/db.lck delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/log/log1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat delete mode 100644 branches/das-java-M2/samples/companyweb/dastest/service.properties delete mode 100644 branches/das-java-M2/samples/companyweb/pom.xml delete mode 100644 branches/das-java-M2/samples/companyweb/readme.htm delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml delete mode 100644 branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml delete mode 100644 branches/das-java-M2/samples/pom.xml delete mode 100644 branches/das-java-M2/samples/testing/tomcat/build.xml delete mode 100644 branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml delete mode 100644 branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/LICENSE.txt delete mode 100644 branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/NOTICE delete mode 100644 branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/README.txt delete mode 100644 branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java delete mode 100644 branches/das-java-M2/samples/testing/tomcat/context.xsl delete mode 100644 branches/das-java-M2/samples/testing/tomcat/datasource.xsl delete mode 100644 branches/das-java-M2/samples/testing/tomcat/pom.xml delete mode 100644 branches/das-java-M2/samples/testing/tomcat/readme.htm delete mode 100644 branches/das-java-M2/samples/testing/tomcat/server.xsl create mode 100644 das-java/branches/das-java-M2/BUILDING.txt create mode 100644 das-java/branches/das-java-M2/LICENSE.txt create mode 100644 das-java/branches/das-java-M2/NOTICE.txt create mode 100644 das-java/branches/das-java-M2/README.txt create mode 100644 das-java/branches/das-java-M2/RELEASE_NOTES.txt create mode 100644 das-java/branches/das-java-M2/STATUS.txt create mode 100644 das-java/branches/das-java-M2/distribution/binary/LICENSE.txt create mode 100644 das-java/branches/das-java-M2/distribution/binary/NOTICE.txt create mode 100644 das-java/branches/das-java-M2/distribution/binary/README.txt create mode 100644 das-java/branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt create mode 100644 das-java/branches/das-java-M2/distribution/binary/STATUS.txt create mode 100644 das-java/branches/das-java-M2/distribution/binary/pom.xml create mode 100644 das-java/branches/das-java-M2/distribution/binary/src/main/assembly/das.xml create mode 100644 das-java/branches/das-java-M2/distribution/samples/LICENSE.txt create mode 100644 das-java/branches/das-java-M2/distribution/samples/NOTICE.txt create mode 100644 das-java/branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt create mode 100644 das-java/branches/das-java-M2/distribution/samples/STATUS.txt create mode 100644 das-java/branches/das-java-M2/distribution/samples/pom.xml create mode 100644 das-java/branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml create mode 100644 das-java/branches/das-java-M2/pom.xml create mode 100644 das-java/branches/das-java-M2/rdb/pom.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java create mode 100644 das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/LICENSE.txt create mode 100644 das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/MANIFEST.MF create mode 100644 das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/NOTICE create mode 100644 das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/README.txt create mode 100644 das-java/branches/das-java-M2/rdb/src/main/resources/config.xsd create mode 100644 das-java/branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/cityStates.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/company.xsd create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/companyMapping.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/customer.xsd create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/customerMapping.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml create mode 100644 das-java/branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml create mode 100644 das-java/branches/das-java-M2/samples/build.xml create mode 100644 das-java/branches/das-java-M2/samples/companyweb/build.xml create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/db.lck create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/log/log1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat create mode 100644 das-java/branches/das-java-M2/samples/companyweb/dastest/service.properties create mode 100644 das-java/branches/das-java-M2/samples/companyweb/pom.xml create mode 100644 das-java/branches/das-java-M2/samples/companyweb/readme.htm create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml create mode 100644 das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml create mode 100644 das-java/branches/das-java-M2/samples/pom.xml create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/build.xml create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/LICENSE.txt create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/NOTICE create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/README.txt create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/context.xsl create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/datasource.xsl create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/pom.xml create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/readme.htm create mode 100644 das-java/branches/das-java-M2/samples/testing/tomcat/server.xsl diff --git a/branches/das-java-M2/BUILDING.txt b/branches/das-java-M2/BUILDING.txt deleted file mode 100644 index 934e991641..0000000000 --- a/branches/das-java-M2/BUILDING.txt +++ /dev/null @@ -1,58 +0,0 @@ -DAS Java Build Environment Setup - -For the most updated documentation on how to build Tuscany : - - http://incubator.apache.org/tuscany/java-projects.html - -For the most updated documentation on how to build DAs : - - http://incubator.apache.org/tuscany/java_das_overview.html - - - -Building DAS - - -1. Set up your environment using the instructions for building the whole of Tuscany (http://incubator.apache.org/tuscany/java-projects.html), -but only download and install Java 5, Maven and Svn - -2. Make sure 'mvn' and 'svn' commands are in your PATH environment variable. - -3. Check out the DAS open source projects from Apache. - - Commands: - - md - cd - md java - cd java - svn co https://svn.apache.org/repos/asf/incubator/tuscany/java/das das - cd das - svn up das - -4.Run "mvn" under /java/das directory to install POM files from the root project to the local repository - - - Commands: - - cd /java/das - mvn - - Notes: - 1.If the mvn command completed successfully, you will see BUILD SUCCESSFUL in the output and tuscany-das-rdb-1.0-SNAPSHOT.jar is created under /java/das/rdb/target directory. - 2.External resources are at times unavailable. It may be necessary to run "mvn" again at a later time. - 3.If you are taking time to reply to firewall prompts, this can cause some requests to time out. Set up the firewall to permit the action without prompting. - -Dependency Jars - - -The DAS.RDB project has a dependency on SDO and requires the following SDO runtime jars to build - - * sdo-api-r2.0.1-1.0-SNAPSHOT.jar - SDO 2.0 Interfaces - * tuscany-sdo-impl-1.0-SNAPSHOT.jar - SDO 2.0 implementation - -The SDO.IMPL project have dependencies on the following EMF (Eclipse Modeling Framework - www.eclipse.org/emf) runtime jars to build: - - * emf-common-2.2.0-SNAPSHOT.jar - some common framework utility and base classes - * emf-ecore-2.2.0-SNAPSHOT.jar - the EMF core runtime implementation classes (the Ecore metamodel) - * emf-ecore-change-2.2.0-SNAPSHOT.jar - the EMF change recorder and framework - * emf-ecore-xmi-2.2.0-SNAPSHOT.jar - EMF's default XML (and XMI) serializer and loader - * xsd-2.2.0-SNAPSHOT.jar - the XML Schema model diff --git a/branches/das-java-M2/LICENSE.txt b/branches/das-java-M2/LICENSE.txt deleted file mode 100644 index 75b52484ea..0000000000 --- a/branches/das-java-M2/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - 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. diff --git a/branches/das-java-M2/NOTICE.txt b/branches/das-java-M2/NOTICE.txt deleted file mode 100644 index 59f0b4314f..0000000000 --- a/branches/das-java-M2/NOTICE.txt +++ /dev/null @@ -1,32 +0,0 @@ -Apache Tuscany DAS for Java -Copyright 2006 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), -sponsored by the Apache 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. - -Unless otherwise indicated, all distribution made available by the Apache Software Foundation -is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). -A copy of the AL is provided with this distribution as the LICENSE.txt file present in the -root directory, and is also available at http://www.apache.org/licenses/. - -The terms and conditions governing the distribution may refer to the AL or other license -agreements, notices or terms and conditions. Some of these other license agreements may -include (but are not limited to): - - . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) - . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) - -This product also includes software developed by: -- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) - -It is your obligation to read and accept all such terms and conditions prior to use of the -distribution. If term or condition is provided, please contact the Apache Software Foundation -to determine what terms and conditions govern that particular distribution. diff --git a/branches/das-java-M2/README.txt b/branches/das-java-M2/README.txt deleted file mode 100644 index b2634b42ed..0000000000 --- a/branches/das-java-M2/README.txt +++ /dev/null @@ -1,10 +0,0 @@ - Apache Tuscany - ------------------------------------------- - -Welcome to Tuscany! Please read the release notes (RELEASE_NOTES.txt) in this directory for -details on the current release. - -Thanks from all of us on the Tuscany team for downloading the package; help -us make it better by sending comments to tuscany-user@ws.apache.org. - - diff --git a/branches/das-java-M2/RELEASE_NOTES.txt b/branches/das-java-M2/RELEASE_NOTES.txt deleted file mode 100644 index a116778476..0000000000 --- a/branches/das-java-M2/RELEASE_NOTES.txt +++ /dev/null @@ -1,53 +0,0 @@ -What's new in DAS Java M2 - - DAS Core features - - - MySQL support - - - Static Data Objects - - - Dynamic root for static graphs - - - "Unique" attribute on relationships - - - Explicit ResultSet shape definition - - - Improved logging - - - Programmatic Configuration - - - Helper for empty SDO Graph - - - Convention over configuration - - - Column named "ID" is the PK - - - Column named "xxx_ID" is the FK to table "xxx" - - - DAS Samples - - - Tomcat integration and automated DAS samples testing (htmlUnit) - - - DAS Samples now have all dependencies and source code inside the sample war - - - For detailed user documentation and feature descriptions, access Tuscany DAS Wiki page - - http://wiki.apache.org/ws/Tuscany/TuscanyJava/DAS_Java_Overview - - Downloading - - http://incubator.apache.org/tuscany/downloads.html#Apache%20Tuscany%20Java%20Downloads - - -Details are described below. - - DAS Java M2 is a superset of previous DAS Java M1 release. - Anything in M1 is also in M2, but M2 contains features and bugfixes not present in M1 release. - -Compatibility Concerns - - - We have removed support for named parameters and previous DAS configuration files will have to be updated as needed. - - diff --git a/branches/das-java-M2/STATUS.txt b/branches/das-java-M2/STATUS.txt deleted file mode 100644 index 24a37ea606..0000000000 --- a/branches/das-java-M2/STATUS.txt +++ /dev/null @@ -1,73 +0,0 @@ -Apache Tuscany Status - -Tuscany provides multiple language implementations of the Service Component Architecture (SCA) specifications and related technologies such as SDO. - -PROJECT STATUS -============== - - Tuscany is being incubated at the request of the Apache Web Services PMC. - For information on incubation please visit the project page at - http://incubator.apache.org/projects/tuscany.html - -PENDING ISSUES -============== -XXXX-XX-XX CCLA received for IBM's contribution of a C++ implementation -XXXX-XX-XX CCLA received for BEA and IBM joint contribution of a Java implementation - -RESOLVED ISSUES SINCE LAST STATUS -================================= -None - -OTHER NEWS -========== - -2006-09-29 Vote to add Ignacio Silva-Lepe as a new committer -2006-09-18 Vote to add Venkata Krishnan as a new committer -2006-08-10 Vote to add Andrew Borley as a new committer -2006-08-07 Vote to add Meeraj Kunnumpurath as a new committer -2006-08-07 Vote to add Kelvin Goodson as a new committer -2006-08-06 Vote to add Brent Daniel as a new committer -2006-08-04 Vote to add Raymond Feng as a new committer -2006-08-01 C++ Milestone 1 release -2006-06-07 Java Milestone 1 release -2006-05-02 Vote to add Dan Kulp as a new committer - -2006-01-05 Contribution of Java implementation by BEA and IBM committed -2006-01-05 Contribution of C+ implementation by IBM committed - -RELEASE STATUS -============== -None - -REFERENCES -========== -Status file http://svn.apache.org/repos/asf/incubator/tuscany/STATUS -User List tuscany-user@ws.apache.org -Developer List tuscany-dev@ws.apache.org -Commits List tuscany-commits@ws.apache.org -Source Code http://svn.apache.org/repos/asf/incubator/tuscany/ -Issue Tracking http://issues.apache.org/jira/browse/TUSCANY - -Committers - ajborley Andrew Borley - antelder Ant Elder - bdaniel Brent Daniel - dkulp Dan Kulp - dims Davanum Srinivas - edslattery Ed Slattery - ekoneil Eddie O'Neil - frankb Frank Budinsky - geirm Geir Magnusson Jr - isilval Ignacio Silva-Lepe - jsdelfino Jean-Sebastien Delfino - jboynes Jeremy Boynes - jmarino Jim Marino - kelvingoodson Kelvin Goodson - kentam Ken Tam - kwilliams Kevin Williams - edwardsmj Mike Edwards - meerajk Meeraj Kunnumpurath - rfeng Raymond Feng - robbinspg Pete Robbins - rineholt Rick Rineholt - svkrish Venkata Krishnan diff --git a/branches/das-java-M2/distribution/binary/LICENSE.txt b/branches/das-java-M2/distribution/binary/LICENSE.txt deleted file mode 100644 index d645695673..0000000000 --- a/branches/das-java-M2/distribution/binary/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - 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. diff --git a/branches/das-java-M2/distribution/binary/NOTICE.txt b/branches/das-java-M2/distribution/binary/NOTICE.txt deleted file mode 100644 index f1aa4f1921..0000000000 --- a/branches/das-java-M2/distribution/binary/NOTICE.txt +++ /dev/null @@ -1,32 +0,0 @@ -Apache Tuscany DAS for Java -Copyright 2006 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), -sponsored by the Apache 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. - -Unless otherwise indicated, all distribution made available by the Apache Software Foundation -is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). -A copy of the AL is provided with this distribution as the LICENSE.txt file present in the -root directory, and is also available at http://www.apache.org/licenses/. - -The terms and conditions governing the distribution may refer to the AL or other license -agreements, notices or terms and conditions. Some of these other license agreements may -include (but are not limited to): - - . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) - . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) - -This product also includes software developed by: -- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) - -It is your obligation to read and accept all such terms and conditions prior to use of the -distribution. If term or condition is provided, please contact the Apache Software Foundation -to determine what terms and conditions govern that particular distribution. diff --git a/branches/das-java-M2/distribution/binary/README.txt b/branches/das-java-M2/distribution/binary/README.txt deleted file mode 100644 index d6827f6719..0000000000 --- a/branches/das-java-M2/distribution/binary/README.txt +++ /dev/null @@ -1,10 +0,0 @@ - Apache Tuscany - ------------------------------------------- - -Welcome to Tuscany! Please read the release notes (RELEASE_NOTES.txt) in this directory for -details on the current release. - -Thanks from all of us on the Tuscany team for downloading the package; help -us make it better by sending comments to tuscany-user@ws.apache.org. - - diff --git a/branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt b/branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt deleted file mode 100644 index a116778476..0000000000 --- a/branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt +++ /dev/null @@ -1,53 +0,0 @@ -What's new in DAS Java M2 - - DAS Core features - - - MySQL support - - - Static Data Objects - - - Dynamic root for static graphs - - - "Unique" attribute on relationships - - - Explicit ResultSet shape definition - - - Improved logging - - - Programmatic Configuration - - - Helper for empty SDO Graph - - - Convention over configuration - - - Column named "ID" is the PK - - - Column named "xxx_ID" is the FK to table "xxx" - - - DAS Samples - - - Tomcat integration and automated DAS samples testing (htmlUnit) - - - DAS Samples now have all dependencies and source code inside the sample war - - - For detailed user documentation and feature descriptions, access Tuscany DAS Wiki page - - http://wiki.apache.org/ws/Tuscany/TuscanyJava/DAS_Java_Overview - - Downloading - - http://incubator.apache.org/tuscany/downloads.html#Apache%20Tuscany%20Java%20Downloads - - -Details are described below. - - DAS Java M2 is a superset of previous DAS Java M1 release. - Anything in M1 is also in M2, but M2 contains features and bugfixes not present in M1 release. - -Compatibility Concerns - - - We have removed support for named parameters and previous DAS configuration files will have to be updated as needed. - - diff --git a/branches/das-java-M2/distribution/binary/STATUS.txt b/branches/das-java-M2/distribution/binary/STATUS.txt deleted file mode 100644 index 24a37ea606..0000000000 --- a/branches/das-java-M2/distribution/binary/STATUS.txt +++ /dev/null @@ -1,73 +0,0 @@ -Apache Tuscany Status - -Tuscany provides multiple language implementations of the Service Component Architecture (SCA) specifications and related technologies such as SDO. - -PROJECT STATUS -============== - - Tuscany is being incubated at the request of the Apache Web Services PMC. - For information on incubation please visit the project page at - http://incubator.apache.org/projects/tuscany.html - -PENDING ISSUES -============== -XXXX-XX-XX CCLA received for IBM's contribution of a C++ implementation -XXXX-XX-XX CCLA received for BEA and IBM joint contribution of a Java implementation - -RESOLVED ISSUES SINCE LAST STATUS -================================= -None - -OTHER NEWS -========== - -2006-09-29 Vote to add Ignacio Silva-Lepe as a new committer -2006-09-18 Vote to add Venkata Krishnan as a new committer -2006-08-10 Vote to add Andrew Borley as a new committer -2006-08-07 Vote to add Meeraj Kunnumpurath as a new committer -2006-08-07 Vote to add Kelvin Goodson as a new committer -2006-08-06 Vote to add Brent Daniel as a new committer -2006-08-04 Vote to add Raymond Feng as a new committer -2006-08-01 C++ Milestone 1 release -2006-06-07 Java Milestone 1 release -2006-05-02 Vote to add Dan Kulp as a new committer - -2006-01-05 Contribution of Java implementation by BEA and IBM committed -2006-01-05 Contribution of C+ implementation by IBM committed - -RELEASE STATUS -============== -None - -REFERENCES -========== -Status file http://svn.apache.org/repos/asf/incubator/tuscany/STATUS -User List tuscany-user@ws.apache.org -Developer List tuscany-dev@ws.apache.org -Commits List tuscany-commits@ws.apache.org -Source Code http://svn.apache.org/repos/asf/incubator/tuscany/ -Issue Tracking http://issues.apache.org/jira/browse/TUSCANY - -Committers - ajborley Andrew Borley - antelder Ant Elder - bdaniel Brent Daniel - dkulp Dan Kulp - dims Davanum Srinivas - edslattery Ed Slattery - ekoneil Eddie O'Neil - frankb Frank Budinsky - geirm Geir Magnusson Jr - isilval Ignacio Silva-Lepe - jsdelfino Jean-Sebastien Delfino - jboynes Jeremy Boynes - jmarino Jim Marino - kelvingoodson Kelvin Goodson - kentam Ken Tam - kwilliams Kevin Williams - edwardsmj Mike Edwards - meerajk Meeraj Kunnumpurath - rfeng Raymond Feng - robbinspg Pete Robbins - rineholt Rick Rineholt - svkrish Venkata Krishnan diff --git a/branches/das-java-M2/distribution/binary/pom.xml b/branches/das-java-M2/distribution/binary/pom.xml deleted file mode 100644 index ffd7fbd4fb..0000000000 --- a/branches/das-java-M2/distribution/binary/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - 4.0.0 - - org.apache.tuscany.das - tuscany-das - 1.0-incubator-M2-SNAPSHOT - - das - pom - Tuscany DAS Distribution - Tuscany Distribution for DAS. - - - - org.apache.tuscany.das - tuscany-das-rdb - ${pom.version} - - - - - install - - - org.apache.maven.plugins - maven-assembly-plugin - 2.2-SNAPSHOT - - - package - - single - - - - - - src/main/assembly/das.xml - - - - - - diff --git a/branches/das-java-M2/distribution/binary/src/main/assembly/das.xml b/branches/das-java-M2/distribution/binary/src/main/assembly/das.xml deleted file mode 100644 index 82b3492a7b..0000000000 --- a/branches/das-java-M2/distribution/binary/src/main/assembly/das.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - bin - false - - zip - tar.gz - - - - - - - *.txt - *.htm - *.html - - - - - - - lib - - org.apache.tuscany.das:tuscany-das-rdb - - 644 - - - - diff --git a/branches/das-java-M2/distribution/samples/LICENSE.txt b/branches/das-java-M2/distribution/samples/LICENSE.txt deleted file mode 100644 index d645695673..0000000000 --- a/branches/das-java-M2/distribution/samples/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - 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. diff --git a/branches/das-java-M2/distribution/samples/NOTICE.txt b/branches/das-java-M2/distribution/samples/NOTICE.txt deleted file mode 100644 index f1aa4f1921..0000000000 --- a/branches/das-java-M2/distribution/samples/NOTICE.txt +++ /dev/null @@ -1,32 +0,0 @@ -Apache Tuscany DAS for Java -Copyright 2006 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), -sponsored by the Apache 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. - -Unless otherwise indicated, all distribution made available by the Apache Software Foundation -is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). -A copy of the AL is provided with this distribution as the LICENSE.txt file present in the -root directory, and is also available at http://www.apache.org/licenses/. - -The terms and conditions governing the distribution may refer to the AL or other license -agreements, notices or terms and conditions. Some of these other license agreements may -include (but are not limited to): - - . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) - . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) - -This product also includes software developed by: -- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) - -It is your obligation to read and accept all such terms and conditions prior to use of the -distribution. If term or condition is provided, please contact the Apache Software Foundation -to determine what terms and conditions govern that particular distribution. diff --git a/branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt b/branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt deleted file mode 100644 index a116778476..0000000000 --- a/branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt +++ /dev/null @@ -1,53 +0,0 @@ -What's new in DAS Java M2 - - DAS Core features - - - MySQL support - - - Static Data Objects - - - Dynamic root for static graphs - - - "Unique" attribute on relationships - - - Explicit ResultSet shape definition - - - Improved logging - - - Programmatic Configuration - - - Helper for empty SDO Graph - - - Convention over configuration - - - Column named "ID" is the PK - - - Column named "xxx_ID" is the FK to table "xxx" - - - DAS Samples - - - Tomcat integration and automated DAS samples testing (htmlUnit) - - - DAS Samples now have all dependencies and source code inside the sample war - - - For detailed user documentation and feature descriptions, access Tuscany DAS Wiki page - - http://wiki.apache.org/ws/Tuscany/TuscanyJava/DAS_Java_Overview - - Downloading - - http://incubator.apache.org/tuscany/downloads.html#Apache%20Tuscany%20Java%20Downloads - - -Details are described below. - - DAS Java M2 is a superset of previous DAS Java M1 release. - Anything in M1 is also in M2, but M2 contains features and bugfixes not present in M1 release. - -Compatibility Concerns - - - We have removed support for named parameters and previous DAS configuration files will have to be updated as needed. - - diff --git a/branches/das-java-M2/distribution/samples/STATUS.txt b/branches/das-java-M2/distribution/samples/STATUS.txt deleted file mode 100644 index 24a37ea606..0000000000 --- a/branches/das-java-M2/distribution/samples/STATUS.txt +++ /dev/null @@ -1,73 +0,0 @@ -Apache Tuscany Status - -Tuscany provides multiple language implementations of the Service Component Architecture (SCA) specifications and related technologies such as SDO. - -PROJECT STATUS -============== - - Tuscany is being incubated at the request of the Apache Web Services PMC. - For information on incubation please visit the project page at - http://incubator.apache.org/projects/tuscany.html - -PENDING ISSUES -============== -XXXX-XX-XX CCLA received for IBM's contribution of a C++ implementation -XXXX-XX-XX CCLA received for BEA and IBM joint contribution of a Java implementation - -RESOLVED ISSUES SINCE LAST STATUS -================================= -None - -OTHER NEWS -========== - -2006-09-29 Vote to add Ignacio Silva-Lepe as a new committer -2006-09-18 Vote to add Venkata Krishnan as a new committer -2006-08-10 Vote to add Andrew Borley as a new committer -2006-08-07 Vote to add Meeraj Kunnumpurath as a new committer -2006-08-07 Vote to add Kelvin Goodson as a new committer -2006-08-06 Vote to add Brent Daniel as a new committer -2006-08-04 Vote to add Raymond Feng as a new committer -2006-08-01 C++ Milestone 1 release -2006-06-07 Java Milestone 1 release -2006-05-02 Vote to add Dan Kulp as a new committer - -2006-01-05 Contribution of Java implementation by BEA and IBM committed -2006-01-05 Contribution of C+ implementation by IBM committed - -RELEASE STATUS -============== -None - -REFERENCES -========== -Status file http://svn.apache.org/repos/asf/incubator/tuscany/STATUS -User List tuscany-user@ws.apache.org -Developer List tuscany-dev@ws.apache.org -Commits List tuscany-commits@ws.apache.org -Source Code http://svn.apache.org/repos/asf/incubator/tuscany/ -Issue Tracking http://issues.apache.org/jira/browse/TUSCANY - -Committers - ajborley Andrew Borley - antelder Ant Elder - bdaniel Brent Daniel - dkulp Dan Kulp - dims Davanum Srinivas - edslattery Ed Slattery - ekoneil Eddie O'Neil - frankb Frank Budinsky - geirm Geir Magnusson Jr - isilval Ignacio Silva-Lepe - jsdelfino Jean-Sebastien Delfino - jboynes Jeremy Boynes - jmarino Jim Marino - kelvingoodson Kelvin Goodson - kentam Ken Tam - kwilliams Kevin Williams - edwardsmj Mike Edwards - meerajk Meeraj Kunnumpurath - rfeng Raymond Feng - robbinspg Pete Robbins - rineholt Rick Rineholt - svkrish Venkata Krishnan diff --git a/branches/das-java-M2/distribution/samples/pom.xml b/branches/das-java-M2/distribution/samples/pom.xml deleted file mode 100644 index f73645eaa6..0000000000 --- a/branches/das-java-M2/distribution/samples/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - org.apache.tuscany.das - tuscany-das - 1.0-incubator-M2-SNAPSHOT - - das-samples - pom - Tuscany DAS Samples Distribution - Tuscany Distribution for DAS Samples. - - - - org.apache.tuscany.das.samples - sample-companyweb - ${pom.version} - war - - - - - install - - - org.apache.maven.plugins - maven-assembly-plugin - 2.2-SNAPSHOT - - - package - - single - - - - - - src/main/assembly/das-samples.xml - - - - - - diff --git a/branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml b/branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml deleted file mode 100644 index 4cb2fabb03..0000000000 --- a/branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - bin - false - - zip - tar.gz - - - - - - - *.txt - *.htm - *.html - - - - - - - - - ../../samples/companyweb/dastest - databases/dastest - keep - - **/*.* - - 644 - - - - - - - - - - - org.apache.tuscany.das.samples:sample-companyweb - - 644 - - - - - diff --git a/branches/das-java-M2/pom.xml b/branches/das-java-M2/pom.xml deleted file mode 100644 index cfa5129504..0000000000 --- a/branches/das-java-M2/pom.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - 4.0.0 - - org.apache.tuscany - parent - 1-incubator - - org.apache.tuscany.das - tuscany-das - pom - Tuscany DAS - 1.0-incubator-M2-SNAPSHOT - - - 1.0-incubator-M2 - - - - rdb - samples - distribution/binary - distribution/samples - - - - - - apache.snapshots - Apache Snapshot Repository - http://people.apache.org/repo/m2-snapshot-repository - - false - - - true - - - - apache.incubator - Apache Incubator Repository - http://people.apache.org/repo/m2-incubating-repository/ - - true - - - false - - - - - - - - org.apache.tuscany.sdo - tuscany-sdo-impl - ${sdo.version} - compile - - - - junit - junit - 3.8.1 - test - - - - - - install - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.5 - 1.5 - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*TestCase.java - - brief - false - - - - org.apache.maven.plugins - maven-jar-plugin - - - src/main/resources/META-INF/MANIFEST.MF - - - - - - diff --git a/branches/das-java-M2/rdb/pom.xml b/branches/das-java-M2/rdb/pom.xml deleted file mode 100644 index 5f93bd014d..0000000000 --- a/branches/das-java-M2/rdb/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - org.apache.tuscany.das - tuscany-das - 1.0-incubator-M2-SNAPSHOT - - 4.0.0 - tuscany-das-rdb - Tuscany DAS for Relational Databases - - - - org.apache.tuscany.sdo - tuscany-sdo-impl - ${sdo.version} - - - - junit - junit - 3.8.1 - test - - - org.apache.derby - derby - 10.1.2.1 - test - - - log4j - log4j - 1.2.12 - compile - - - - - - - org.apache.tuscany.sdo - tuscany-sdo-plugin - - - config - - ${basedir}/src/main/resources/config.xsd - true - true - - - generate - - - - company - - ${basedir}/src/test/resources/company.xsd - true - - - generate - - - - customer - - ${basedir}/src/test/resources/customer.xsd - true - - - generate - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*AllTestsDerby.java - - - - - - - - diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java deleted file mode 100644 index 3c80c34b68..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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; - -/** - * A Command is used to execute a read or write to a database - */ -public interface Command { - - /** - * Performs the function defined by the command - */ - void execute(); - - /** - * Performs the function defined by the command and return the results in the root DataObject - * - * @return the root DataObject - */ - DataObject executeQuery(); - - /** - * Sets the value of the associated Parameter - * - * @param index - * the index of the Parameter - * @param value - * the value for the Parameter - */ - void setParameter(int index, Object value); - - /** - * Returns the value of the associated Parameter - * - * @param index - * the index of the Parameter - * @return the value of the Parameter - */ - Object getParameter(int index); - - /** - * Returns the value of the database-generated key. This method is specific - * to an "insert" command and will be valid only after the command has - * been executed. - * - * @return the generated key - */ - int getGeneratedKey(); - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java deleted file mode 100644 index 04d450b020..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.config.Config; -import org.apache.tuscany.das.rdb.config.ConfigFactory; -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; - -/** - * 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 = ConfigFactory.INSTANCE; - - public ConfigHelper() { - config = factory.createConfig(); - configWrapper = new MappingWrapper(config); - } - - public ConfigHelper(Config config) { - this.config = config; - configWrapper = new MappingWrapper(config); - } - - public void addPrimaryKey(String columnName) { - configWrapper.addPrimaryKey(columnName); - } - - public Relationship addRelationship(String parentName, String childName) { - return configWrapper.addRelationship(parentName, childName); - } - - public Table addTable(String name, String propertyName) { - return configWrapper.addTable(name, propertyName); - } - - public void addUpdateStatement(Table table, String statement, String parameters) { - configWrapper.addUpdateStatement(table, statement, parameters); - } - - public void addCreateStatement(Table table, String statement, String parameters) { - configWrapper.addCreateStatement(table, statement, parameters); - } - - public void addDeleteStatement(Table table, String statement, String parameters) { - configWrapper.addDeleteStatement(table, statement, parameters); - } - - public void addConnectionInfo(String dataSourceName, boolean managedtx) { - configWrapper.addConnectionInfo(dataSourceName, managedtx); - } - - public void addConnectionInfo(String dataSourceName) { - configWrapper.addConnectionInfo(dataSourceName, true); - } - - public void setDataObjectModel(String dataObjectModel) { - configWrapper.getConfig().setDataObjectModel(dataObjectModel); - } - - public Command addSelectCommand(String name, String sql) { - return configWrapper.addCommand(name, sql, "select"); - } - - public Command addUpdateCommand(String name, String sql) { - return configWrapper.addCommand(name, sql, "update"); - } - - public Command addInsertCommand(String name, String sql) { - return configWrapper.addCommand(name, sql, "insert"); - } - - public Command addDeleteCommand(String name, String sql) { - return configWrapper.addCommand(name, sql, "delete"); - } - - public Config getConfig() { - return config; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java deleted file mode 100644 index 24f2e5ee2e..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - */ - 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 - */ - Object getColumnValue(Object propertyData); - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java deleted file mode 100644 index 43f1e30d1a..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.impl.DASFactoryImpl; - -import commonj.sdo.DataObject; - -/** - * A CommandGroup represents a set of {@link Command} and single {@link ApplyChangesCommand} - * that are created from a common config file. - * - */ -public interface DAS { - - DASFactory FACTORY = new DASFactoryImpl(); - - /** - * 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 - */ - void applyChanges(DataObject root); - - /** - * Gets the named command from this factory's inventory - * - * @param name - * The identifying name of the requested command - * @return Returns the identified command - */ - Command getCommand(String name); - - /** - * If the CommandGroup is managing connections then this method must be called - * when the client is done with the instance. - * - */ - void releaseResources(); - - /** - * Creates a Command based on the provided SQL statement - * - * @param sql - * The SQL statement - * @return returns a Command instance - */ - Command createCommand(String sql); - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java deleted file mode 100644 index a0e38ab7cf..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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; -import java.sql.Connection; - -import org.apache.tuscany.das.rdb.config.Config; - -/** - * A DASFactory produces {@link DAS} instances. - * - * - */ -public interface DASFactory { - - /** - * Creates a DAS based on the provided config file stream - * - * @param configStream - * A stream over a DAS config file - * @return returns a DAS instance - */ - DAS createDAS(InputStream configStream); - - /** - * Creates a DAS based on the provide config file stream and connection - * @param configStream - * @param connection - * @return - */ - DAS createDAS(InputStream configStream, Connection connection); - - /** - * Creates a DAS based on the provided config - * - * @param config - * A DAS config object - * @return returns a DAS instance - */ - DAS createDAS(Config config); - - /** - * Creates a DAS based on the provided config and connection - * @param config - * @param connection - * @return - */ - DAS createDAS(Config config, Connection connection); - - /** - * Creates a DAS based on the provided connection - * @param connection - * @return - */ - DAS createDAS(Connection connection); - - -} - diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java deleted file mode 100644 index aa18558fce..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - */ - DataObject next(); - - /** - * Get the page prior to the last page returned - * - * @return the previous page - */ - DataObject previous(); - - /** - * Return a specific identified page. - * - * @param page - * The number of the page to return - * @return the indicated page - */ - DataObject getPage(int page); - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java deleted file mode 100644 index cca0db6c07..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; -import java.util.Map; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.config.Column; -import org.apache.tuscany.das.rdb.config.Command; -import org.apache.tuscany.das.rdb.config.Config; -import org.apache.tuscany.das.rdb.config.ConfigFactory; -import org.apache.tuscany.das.rdb.config.ConnectionInfo; -import org.apache.tuscany.das.rdb.config.Create; -import org.apache.tuscany.das.rdb.config.Delete; -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.Update; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -import commonj.sdo.Property; - -public class MappingWrapper { - - private static final ConfigFactory FACTORY = ConfigFactory.INSTANCE; - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(MappingWrapper.class); - - private Config config; - - public MappingWrapper() { - config = FACTORY.createConfig(); - } - - public MappingWrapper(Config mapping) { - if (mapping == null) { - this.config = FACTORY.createConfig(); - } else { - this.config = mapping; - } - } - - public Config getConfig() { - return this.config; - } - - public Table getTable(String tableName) { - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Looking for table " + tableName); - } - - Iterator i = config.getTable().iterator(); - while (i.hasNext()) { - Table t = (Table) i.next(); - if (tableName.equalsIgnoreCase(t.getTableName())) { - return t; - } - } - - return null; - } - - public Table getTableByTypeName(String typeName) { - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Looking for table by property: " + typeName); - } - - Iterator i = config.getTable().iterator(); - while (i.hasNext()) { - Table t = (Table) i.next(); - TableWrapper wrapper = new TableWrapper(t); - if (typeName.equals(wrapper.getTypeName())) { - return t; - } - } - return null; - - } - - public void addImpliedRelationship(String parentTableName, String childTableName, String fkColumnName) { - - // Don't create a relationship for something like Book.Book_ID - if (parentTableName.equalsIgnoreCase(childTableName)) { - return; - } - - // Don't create a relationship if one already exists in the config - Iterator i = config.getRelationship().iterator(); - while (i.hasNext()) { - Relationship r = (Relationship) i.next(); - if (r.getPrimaryKeyTable().equals(parentTableName) && r.getForeignKeyTable().equals(childTableName)) { - return; - } - } - - Relationship r = FACTORY.createRelationship(); - r.setName(childTableName); - r.setPrimaryKeyTable(parentTableName); - r.setForeignKeyTable(childTableName); - - KeyPair pair = FACTORY.createKeyPair(); - pair.setPrimaryKeyColumn("ID"); - pair.setForeignKeyColumn(fkColumnName); - - r.getKeyPair().add(pair); - r.setMany(true); - - config.getRelationship().add(r); - } - - public Relationship addRelationship(String parentName, String childName) { - - 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()); - - if (this.logger.isDebugEnabled()) { - this.logger.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); - - return r; - - } - - public void addPrimaryKey(String columnName) { - addPrimaryKey(Collections.singletonList(columnName)); - } - - public void addPrimaryKey(List columnNames) { - - Iterator i = columnNames.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); - } - } - - public String getTableTypeName(String tableName) { - Table t = getTable(tableName); - if (t == null) { - return tableName; - } - String propertyName = t.getTypeName(); - - if (propertyName == null) { - return tableName; - } - - return propertyName; - } - - public Column getColumn(Table t, String columnName) { - if (t == null) { - return null; - } - Iterator i = t.getColumn().iterator(); - while (i.hasNext()) { - Column c = (Column) i.next(); - if (c.getColumnName().equals(columnName)) { - return c; - } - } - - if (this.logger.isDebugEnabled()) { - this.logger.debug("WARNING: Could not find column " + columnName + " in table " + t.getTableName()); - } - - 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.getColumnName().equals(propertyName)) { - return c; - } - - if (c.getPropertyName() != null && c.getPropertyName().equals(propertyName)) { - return c; - } - } - - if (this.logger.isDebugEnabled()) { - this.logger.debug("WARNING: Could not find column " + propertyName + " in table " + t.getTableName()); - } - - 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.getColumnName(); - } - - return propertyName; - } - - public Table addTable(String tableName, String typeName) { - Table table = getTable(tableName); - if (table != null) { - throw new RuntimeException("Table " + tableName + "already exists"); - } - - table = ConfigFactory.INSTANCE.createTable(); - table.setTableName(tableName); - table.setTypeName(typeName); - config.getTable().add(table); - - return table; - } - - private Table findOrCreateTable(String tableName) { - Table table = getTable(tableName); - if (table == null) { - table = ConfigFactory.INSTANCE.createTable(); - table.setTableName(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.getColumnName())) { - return c; - } - } - - Column c = ConfigFactory.INSTANCE.createColumn(); - c.setColumnName(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) { - List 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 List getInsertOrder() { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Getting insert order"); - } - - List inserts = new ArrayList(); - Map parentToChild = new HashMap(); - - List parents = new ArrayList(); - List 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); - } - - if (this.logger.isDebugEnabled()) { - this.logger.debug(inserts); - } - - return inserts; - } - - public List getDeleteOrder() { - List deleteOrder = new ArrayList(); - deleteOrder.addAll(getInsertOrder()); - Collections.reverse(deleteOrder); - return deleteOrder; - } - - public void addConverter(String name, String converter) { - - 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 Map getConverters(Table table) { - Map 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.getColumnName(); - } - 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"); - } - - public void addUpdateStatement(Table table, String statement, String parameters) { - - Update update = ConfigFactory.INSTANCE.createUpdate(); - update.setSql(statement); - update.setParameters(parameters); - table.setUpdate(update); - - } - - public void addDeleteStatement(Table table, String statement, String parameters) { - - Delete delete = ConfigFactory.INSTANCE.createDelete(); - delete.setSql(statement); - delete.setParameters(parameters); - table.setDelete(delete); - - } - - public void addCreateStatement(Table table, String statement, String parameters) { - - Create create = ConfigFactory.INSTANCE.createCreate(); - create.setSql(statement); - create.setParameters(parameters); - table.setCreate(create); - - } - - public void addConnectionInfo(String dataSourceName, boolean managedtx) { - ConnectionInfo info = ConfigFactory.INSTANCE.createConnectionInfo(); - info.setDataSource(dataSourceName); - info.setManagedtx(managedtx); - config.setConnectionInfo(info); - } - - public Command addCommand(String name, String sql, String kind) { - Command cmd = ConfigFactory.INSTANCE.createCommand(); - cmd.setName(name); - cmd.setKind(kind); - cmd.setSQL(sql); - - config.getCommand().add(cmd); - - return cmd; - } - - public void addImpliedPrimaryKey(String tableName, String columnName) { - Table t = findOrCreateTable(tableName); - - Iterator i = t.getColumn().iterator(); - boolean hasPK = false; - while (i.hasNext()) { - Column c = (Column) i.next(); - if (c.isPrimaryKey()) { - hasPK = true; - } - } - - if (!hasPK) { - Column c = findOrCreateColumn(t, columnName); - c.setPrimaryKey(true); - } - - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java deleted file mode 100644 index 19824e4e99..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -public class QualifiedColumn { - - private final String tableName; - - private final String columnName; - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(QualifiedColumn.class); - - public QualifiedColumn(String name) { - tableName = name.substring(0, name.indexOf('.')); - columnName = name.substring(name.indexOf('.') + 1); - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Table name: " + tableName); - this.logger.debug("Column name: " + columnName); - } - } - - public String getTableName() { - return this.tableName; - } - - public String getColumnName() { - return this.columnName; - } -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java deleted file mode 100644 index 0e4447bf8b..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; - -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() { - List 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java deleted file mode 100644 index 82961861e2..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; - -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 getTypeName() { - return table.getTypeName() == null ? table.getTableName() : table.getTypeName(); - } - - public Collection getPrimaryKeyNames() { - List pkNames = new ArrayList(); - Iterator i = table.getColumn().iterator(); - while (i.hasNext()) { - Column c = (Column) i.next(); - if (c.isPrimaryKey()) { - pkNames.add(c.getColumnName()); - } - } - return pkNames; - } - - public Collection getPrimaryKeyProperties() { - - List 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(); - } - - return c.getColumnName(); - } - - public boolean isGeneratedColumnProperty(String name) { - Column c = getColumnByPropertyName(name); - return c == null ? false : c.isGenerated(); - } - - 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.getColumnName(); - } - 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(); - } - return c.getColumnName(); - - } - - public String getManagedColumnPropertyName() { - Iterator i = table.getColumn().iterator(); - while (i.hasNext()) { - Column c = (Column) i.next(); - if (c.isManaged()) { - return c.getPropertyName() == null ? c.getColumnName() : c.getPropertyName(); - } - } - return null; - - } - - public Column getManagedColumn() { - Iterator i = table.getColumn().iterator(); - while (i.hasNext()) { - Column c = (Column) i.next(); - if (c.isManaged()) { - return c; - } - } - return null; - } -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java deleted file mode 100644 index 05d97723a7..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 org.apache.tuscany.das.rdb.Converter; - -public class BaseGenerator { - - protected Converter getConverter(String converter) { - if (converter != null) { - try { - return (Converter) Thread.currentThread().getContextClassLoader().loadClass(converter).newInstance(); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - return null; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java deleted file mode 100644 index 30a222634b..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Iterator; - -import org.apache.log4j.Logger; -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.impl.SDODataTypes; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -public final class DeleteGenerator extends BaseGenerator { - - public static final DeleteGenerator INSTANCE = new DeleteGenerator(); - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(DeleteGenerator.class); - - private DeleteGenerator() { - super(); - } - - private String getDeleteStatement(Table t) { - TableWrapper table = new TableWrapper(t); - - StringBuffer statement = new StringBuffer(); - statement.append("delete from "); - statement.append(t.getTableName()); - 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 "); - } - } - - if (this.logger.isDebugEnabled()) { - this.logger.debug(statement.toString()); - } - - return statement.toString(); - } - - public DeleteCommandImpl getDeleteCommand(Table t) { - TableWrapper tw = new TableWrapper(t); - DeleteCommandImpl deleteCommand = new DeleteCommandImpl(getDeleteStatement(t)); - - Iterator i = tw.getPrimaryKeyProperties().iterator(); - for (int idx = 1; i.hasNext(); idx++) { - String property = (String) i.next(); - ParameterImpl p = new ParameterImpl(); - p.setName(property); - p.setType(SDODataTypes.OBJECT); - p.setConverter(getConverter(tw.getConverter(property))); - p.setIndex(idx); - deleteCommand.addParameter(p); - } - return deleteCommand; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java deleted file mode 100644 index 5fda043253..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Collections; -import java.util.Iterator; -import java.util.List; - -import org.apache.log4j.Logger; -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.LoggerFactory; - -import commonj.sdo.DataObject; -import commonj.sdo.Property; - -public final class InsertGenerator extends BaseGenerator { - - public static final InsertGenerator INSTANCE = new InsertGenerator(); - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(InsertGenerator.class); - - private InsertGenerator() { - super(); - } - - public InsertCommandImpl getInsertCommand(MappingWrapper config, DataObject changedObject, Table t) { - List parameters = new ArrayList(); - TableWrapper table = new TableWrapper(t); - StringBuffer statement = new StringBuffer("insert into "); - statement.append(t.getTableName()); - - Iterator i = getAttributeProperties(changedObject, config).iterator(); - - List attributes = new ArrayList(); - List generatedKeys = new ArrayList(); - while (i.hasNext()) { - Property attr = (Property) i.next(); - if (table.isGeneratedColumnProperty(attr.getName())) { - generatedKeys.add(attr.getName()); - } else { - 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(), - (String[]) generatedKeys.toArray(new String[0])); - Iterator params = parameters.iterator(); - for (int idx = 1; params.hasNext(); idx++) { - Property property = (Property) params.next(); - ParameterImpl p = new ParameterImpl(); - p.setName(property.getName()); - p.setType(property.getType()); - p.setConverter(getConverter(table.getConverter(property.getName()))); - p.setIndex(idx); - cmd.addParameter(p); - - } - if (this.logger.isDebugEnabled()) { - this.logger.debug(statement.toString()); - } - - return cmd; - - } - - private List getAttributeProperties(DataObject obj, MappingWrapper config) { - List 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() != null && 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; - - } - - private boolean hasState(MappingWrapper config, Relationship rel, DataObject changedObject) { - - if (!rel.isMany()) { - Table t = config.getTableByTypeName(changedObject.getType().getName()); - TableWrapper tw = new TableWrapper(t); - RelationshipWrapper rw = new RelationshipWrapper(rel); - if ((rel.getForeignKeyTable().equals(t.getTableName())) - && (Collections.disjoint(tw.getPrimaryKeyProperties(), rw.getForeignKeys()))) { - return true; - } - } - - return false; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java deleted file mode 100644 index e2c62fd6ee..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Iterator; -import java.util.List; - -import org.apache.log4j.Logger; -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.ManagedParameterImpl; -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.LoggerFactory; - -import commonj.sdo.ChangeSummary; -import commonj.sdo.DataObject; -import commonj.sdo.Property; -import commonj.sdo.Type; - -public final class UpdateGenerator extends BaseGenerator { - - public static final UpdateGenerator INSTANCE = new UpdateGenerator(); - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(UpdateGenerator.class); - - private UpdateGenerator() { - super(); - } - - public UpdateCommandImpl getUpdateCommand(MappingWrapper mapping, DataObject changedObject, Table table) { - List updatedProperties = new ArrayList(); - List managedProperties = new ArrayList(); - List whereClauseProperties = new ArrayList(); - Type type = changedObject.getType(); - TableWrapper t = new TableWrapper(table); - StringBuffer statement = new StringBuffer("update "); - statement.append(table.getTableName()); - statement.append(" set "); - - ChangeSummary summary = changedObject.getDataGraph().getChangeSummary(); - Iterator i = getChangedFields(mapping, summary, changedObject).iterator(); - - while (i.hasNext()) { - Property property = (Property) i.next(); - Column c = t.getColumnByPropertyName(property.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 { - updatedProperties.add(property); - statement.append(c == null ? property.getName() : c.getColumnName()); - statement.append(" = ?"); - if (i.hasNext()) { - statement.append(", "); - } - } - } - - Column c = t.getManagedColumn(); - if (c != null) { - statement.append(", "); - statement.append(c.getColumnName()); - statement.append(" = ?"); - managedProperties.add(changedObject.getProperty(t.getManagedColumnPropertyName())); - } - statement.append(" where "); - - Iterator names = t.getPrimaryKeyNames().iterator(); - Iterator pkProperties = t.getPrimaryKeyProperties().iterator(); - while (names.hasNext() && pkProperties.hasNext()) { - String name = (String) names.next(); - String property = (String) pkProperties.next(); - statement.append(name); - statement.append(" = ?"); - if (names.hasNext() && pkProperties.hasNext()) { - statement.append(" and "); - } - whereClauseProperties.add(type.getProperty(property)); - } - - if (t.getCollisionColumn() != null) { - statement.append(" and "); - statement.append(t.getCollisionColumn().getColumnName()); - statement.append(" = ?"); - whereClauseProperties.add(type.getProperty(t.getCollisionColumnPropertyName())); - } - - UpdateCommandImpl updateCommand; - if (t.getCollisionColumn() != null) { - updateCommand = new OptimisticWriteCommandImpl(statement.toString()); - } else { - updateCommand = new UpdateCommandImpl(statement.toString()); - } - - int idx = 1; - Iterator params = updatedProperties.iterator(); - while (params.hasNext()) { - Property p = (Property) params.next(); - updateCommand.addParameter(createParameter(t, p, idx++)); - } - - params = managedProperties.iterator(); - while (params.hasNext()) { - Property p = (Property) params.next(); - updateCommand.addParameter(createManagedParameter(t, p, idx++)); - } - - params = whereClauseProperties.iterator(); - while (params.hasNext()) { - Property p = (Property) params.next(); - updateCommand.addParameter(createParameter(t, p, idx++)); - } - - if (this.logger.isDebugEnabled()) { - this.logger.debug(statement.toString()); - } - - return updateCommand; - } - - private List getChangedFields(MappingWrapper mapping, ChangeSummary summary, DataObject obj) { - List 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 ParameterImpl createManagedParameter(TableWrapper table, Property property, int idx) { - ParameterImpl param = new ManagedParameterImpl(); - param.setName(property.getName()); - param.setType(property.getType()); - param.setConverter(getConverter(table.getConverter(property.getName()))); - if (idx != -1) { - param.setIndex(idx); - } - - return param; - } - - private ParameterImpl createParameter(TableWrapper table, Property property, int idx) { - ParameterImpl param = new ParameterImpl(); - param.setName(property.getName()); - param.setType(property.getType()); - param.setConverter(getConverter(table.getConverter(property.getName()))); - if (idx != -1) { - param.setIndex(idx); - } - - return param; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java deleted file mode 100644 index d92da316ea..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -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 final Logger logger = LoggerFactory.INSTANCE.getLogger(DataObjectMaker.class); - - 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 - - if (this.logger.isDebugEnabled()) { - this.logger.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); - } else { - this.rootObject.set(p, obj); - } - } - - } - - Iterator columnNames = resultMetadata.getPropertyNames(tableData.getTableName()).iterator(); - while (columnNames.hasNext()) { - String propertyName = (String) columnNames.next(); - - Property p = findProperty(obj.getType(), propertyName); - if (p == null) { - throw new RuntimeException("Type " + obj.getType().getName() - + " does not contain a property named " + propertyName); - } - - Object value = tableData.getColumnData(propertyName); - - obj.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(); - if (tableName.equals(p.getType().getName())) { - return p.getType(); - } - } - - return null; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java deleted file mode 100644 index a08f184b9a..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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); - } - } - - return data; - - } -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java deleted file mode 100644 index 54afe95168..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.apache.tuscany.das.rdb.config.Config; -import org.apache.tuscany.das.rdb.config.Relationship; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.impl.ResultSetShape; -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; - -/** - */ -public class GraphBuilderMetadata { - - private MappingWrapper configWrapper; - - private final Collection resultSets = new ArrayList(); - - private String typeURI; - - private Type rootType; - - private TypeHelper typeHelper = SDOUtil.createTypeHelper(); - - public GraphBuilderMetadata(Collection results, Config model, ResultSetShape shape) throws SQLException { - this.configWrapper = new MappingWrapper(model); - if (model != null) { - this.typeURI = model.getDataObjectModel(); - } - - Iterator i = results.iterator(); - while (i.hasNext()) { - ResultSet rs = (ResultSet) i.next(); - ResultMetadata resultMetadata = new ResultMetadata(rs, configWrapper, shape); - resultSets.add(resultMetadata); - } - - } - - /** - * Returns the collection of ResultMetadata objects - */ - public Collection getResultMetadata() { - return this.resultSets; - } - - /** - * Returns the set of defined relationships - */ - - public Collection getRelationships() { - return configWrapper.getConfig().getRelationship(); - } - - /** - * Returns the root Type - */ - public Type getRootType() { - if (this.rootType == null) { - if (this.typeURI == null) { - createDynamicTypes(); - } else { - createDynamicRoot(); - } - } - - return this.rootType; - } - - public MappingWrapper getConfigWrapper() { - return this.configWrapper; - } - - /** - * Creates a set of SDO Types based on the query results and supplied config information - */ - - private void createDynamicTypes() { - - DataObjectUtil.initRuntime(); - - Type root = SDOUtil.createType(typeHelper, getDefaultURI(), "DataGraphRoot", false); - - Iterator iter = getResultMetadata().iterator(); - while (iter.hasNext()) { - - ResultMetadata resultMetadata = (ResultMetadata) iter.next(); - - // Create a Type for each Table represented in the ResultSet - Iterator names = resultMetadata.getAllTablePropertyNames().iterator(); - while (names.hasNext()) { - String tableName = (String) names.next(); - - if (root.getProperty(tableName) == null) { - Type tableType = SDOUtil.createType(typeHelper, getDefaultURI(), tableName, false); - Property property = SDOUtil.createProperty(root, tableName, tableType); - SDOUtil.setMany(property, true); - SDOUtil.setContainment(property, true); - } - } - - // TODO tablePropertyMap is temporary until Tuscany-203 is fixed - Map tablePropertyMap = new HashMap(); - - for (int i = 1; i <= resultMetadata.getResultSetSize(); i++) { - - Property ref = root.getProperty(resultMetadata.getTablePropertyName(i)); - - if (ref == null) { - throw new RuntimeException("Could not find table " + resultMetadata.getTablePropertyName(i) - + " in the SDO model"); - } - - // TODO Temporary code to check to see if a property has already been added. - // Replace when Tuscany-203 is fixed - List addedProperties = (List) tablePropertyMap.get(ref.getName()); - if (addedProperties == null) { - addedProperties = new ArrayList(); - tablePropertyMap.put(ref.getName(), addedProperties); - } - - - - String columnName = resultMetadata.getColumnPropertyName(i); - - // TODO temporary check until Tuscany-203 is fixed - if (!addedProperties.contains(columnName)) { - addedProperties.add(columnName); - Type atype = resultMetadata.getDataType(i); - - SDOUtil.createProperty(ref.getType(), columnName, atype); - - } - - } - } - - MappingWrapper wrapper = getConfigWrapper(); - Iterator i = getRelationships().iterator(); - while (i.hasNext()) { - Relationship r = (Relationship) i.next(); - - String parentName = wrapper.getTableTypeName(r.getPrimaryKeyTable()); - String childName = wrapper.getTableTypeName(r.getForeignKeyTable()); - - if (parentName == null) { - throw new RuntimeException("The parent table (" + r.getPrimaryKeyTable() - + ") in relationship " + r.getName() - + " was not found in the mapping information."); - } else if (childName == null) { - throw new RuntimeException("The child table (" + r.getForeignKeyTable() - + ") in relationship " + r.getName() - + " was not found in the mapping information."); - } - - Property parentProperty = root.getProperty(parentName); - Property childProperty = root.getProperty(childName); - - if (parentProperty == null) { - throw new RuntimeException("The parent table (" + parentName + ") in relationship " - + r.getName() + " was not found."); - } else if (childProperty == null) { - throw new RuntimeException("The child table (" + childName + ") in relationship " - + r.getName() + " was not found."); - } - - Type parent = parentProperty.getType(); - Type child = childProperty.getType(); - - 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()); - } - - this.rootType = root; - } - - private String getDefaultURI() { - return "http:///org.apache.tuscany.das.rdb/das"; - } - - /** - * Create a dynamic root Type to act as a container Type for a set of generated Types - * - */ - private void createDynamicRoot() { - Type root = SDOUtil.createType(typeHelper, getDefaultURI() + "/DataGraphRoot", "DataGraphRoot", false); - - List types = SDOUtil.getTypes(typeHelper, typeURI); - if (types == null) { - throw new RuntimeException("SDO Types have not been registered for URI " + typeURI); - } - - Iterator i = types.iterator(); - while (i.hasNext()) { - Type type = (Type) i.next(); - Property property = SDOUtil.createProperty(root, type.getName(), type); - SDOUtil.setContainment(property, true); - SDOUtil.setMany(property, true); - } - this.rootType = root; - } - - public List getDefinedTypes() { - if (this.typeURI == null) { - return SDOUtil.getTypes(typeHelper, getDefaultURI()); - } - - List types = SDOUtil.getTypes(typeHelper, typeURI); - types.add(rootType); - return types; - - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java deleted file mode 100644 index f7de59f1a1..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.Map; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -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 final Logger logger = LoggerFactory.INSTANCE.getLogger(MultiTableRegistry.class); - - private Map tableNameMap; - - private Map tableValueMap; - - 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 (this.logger.isDebugEnabled()) { - this.logger.debug("Looking for table " + tableName + " with PK " + primaryKey); - this.logger.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 Map getPkMap(String tableName) { - Map 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java deleted file mode 100644 index 09e1a98d9d..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; -import java.util.Map; - -import org.apache.tuscany.das.rdb.Converter; -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.impl.ResultSetShape; - -import commonj.sdo.Type; - -public class ResultMetadata { - - private Map tableToPropertyMap = new HashMap(); - - private List typeNames = new ArrayList(); - - private List propertyNames = new ArrayList(); - - private final ResultSet resultSet; - - private final ResultSetShape resultSetShape; - - private final MappingWrapper configWrapper; - - private Converter[] converters; - - public ResultMetadata(ResultSet rs, MappingWrapper cfgWrapper, ResultSetShape shape) throws SQLException { - - this.resultSet = rs; - this.configWrapper = cfgWrapper; - - if (shape == null) { - this.resultSetShape = new ResultSetShape(rs.getMetaData()); - } else { - this.resultSetShape = shape; - } - - this.converters = new Converter[resultSetShape.getColumnCount()]; - - Map impliedRelationships = new HashMap(); - for (int i = 1; i <= resultSetShape.getColumnCount(); i++) { - String tableName = resultSetShape.getTableName(i); - - String typeName = configWrapper.getTableTypeName(tableName); - String columnName = resultSetShape.getColumnName(i); - - if (columnName.contains("_ID")) { - impliedRelationships.put(columnName, tableName); - } else if (columnName.equalsIgnoreCase("ID")) { - configWrapper.addImpliedPrimaryKey(tableName, columnName); - } - - String propertyName = configWrapper.getColumnPropertyName(tableName, columnName); - String converterName = configWrapper.getConverter(tableName, resultSetShape.getColumnName(i)); - - converters[i - 1] = loadConverter(converterName); - - typeNames.add(typeName); - propertyNames.add(propertyName); - - Collection properties = (Collection) tableToPropertyMap.get(typeName); - if (properties == null) { - properties = new ArrayList(); - } - properties.add(propertyName); - tableToPropertyMap.put(typeName, properties); - } - - Iterator i = impliedRelationships.keySet().iterator(); - while (i.hasNext()) { - String columnName = (String) i.next(); - String pkTableName = columnName.substring(0, columnName.indexOf("_ID")); - String fkTableName = (String) impliedRelationships.get(columnName); - List pkTableProperties = (List) tableToPropertyMap.get(pkTableName); - if ((pkTableProperties != null) && (pkTableProperties.contains("ID"))) { - configWrapper.addImpliedRelationship(pkTableName, fkTableName, columnName); - } - } - // Add any tables defined in the model but not included in the ResultSet - // to the list of propertyNames - Config model = configWrapper.getConfig(); - if (model != null) { - Iterator tablesFromModel = model.getTable().iterator(); - while (tablesFromModel.hasNext()) { - TableWrapper t = new TableWrapper((Table) tablesFromModel.next()); - if (tableToPropertyMap.get(t.getTypeName()) == null) { - tableToPropertyMap.put(t.getTypeName(), Collections.EMPTY_LIST); - } - } - } - - } - - private Converter loadConverter(String converterName) { - if (converterName != null) { - - try { - Class converterClazz = Class.forName(converterName, true, - Thread.currentThread().getContextClassLoader()); - if (null != converterClazz) { - return (Converter) converterClazz.newInstance(); - } - - converterClazz = Class.forName(converterName); - if (converterClazz != null) { - return (Converter) converterClazz.newInstance(); - } - } catch (ClassNotFoundException ex) { - throw new RuntimeException(ex); - } catch (IllegalAccessException ex) { - throw new RuntimeException(ex); - } catch (InstantiationException ex) { - throw new RuntimeException(ex); - } - } - return new DefaultConverter(); - } - - public String getColumnPropertyName(int i) { - return (String) propertyNames.get(i - 1); - } - - public String getDatabaseColumnName(int i) { - return resultSetShape.getColumnName(i); - } - - public String getTableName(String columnName) { - return (String) typeNames.get(propertyNames.indexOf(columnName)); - } - - public int getTableSize(String tableName) { - return ((Collection) tableToPropertyMap.get(tableName)).size(); - } - - public Type getDataType(String columnName) { - return resultSetShape.getColumnType(propertyNames.indexOf(columnName)); - } - - public String getTablePropertyName(int i) { - return (String) typeNames.get(i - 1); - } - - public Collection getAllTablePropertyNames() { - return tableToPropertyMap.keySet(); - } - - public String toString() { - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (Table Names: "); - Iterator i = typeNames.iterator(); - while (i.hasNext()) { - String tableName = (String) i.next(); - result.append(' '); - result.append(tableName); - result.append(','); - } - - result.append(" columnNames: "); - - i = propertyNames.iterator(); - while (i.hasNext()) { - String columnName = (String) i.next(); - result.append(' '); - result.append(columnName); - result.append(','); - } - - result.append(" mappingModel: "); - result.append(this.configWrapper.getConfig()); - - result.append(" resultSet: "); - result.append(resultSet); - - result.append(" resultSetSize: "); - result.append(resultSetShape.getColumnCount()); - result.append(')'); - return result.toString(); - - } - - /** - * @return - */ - public int getNumberOfTables() { - return tableToPropertyMap.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) { - - Table t = configWrapper.getTableByTypeName(getTablePropertyName(i)); - if (t == null) { - return true; - } - - // If no Columns have been defined, consider every column to be part of - // the PK - if (t.getColumn().isEmpty()) { - return true; - } - - Column c = configWrapper.getColumn(t, getDatabaseColumnName(i)); - - if (c == null) { - return false; - } - - if (c.isPrimaryKey()) { - return true; - } - - return false; - } - - /** - * @param i - * @return - */ - public Type getDataType(int i) { - return resultSetShape.getColumnType(i); - } - - /** - * @param tableName - * @return - */ - public Collection getPropertyNames(String tableName) { - return (Collection) tableToPropertyMap.get(tableName); - } - - public ResultSet getResultSet() { - return this.resultSet; - } - - public int getResultSetSize() { - return resultSetShape.getColumnCount(); - } - - public boolean isRecursive() { - return configWrapper.hasRecursiveRelationships(); - } - - public Converter getConverter(int i) { - return converters[i - 1]; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java deleted file mode 100644 index 74a4627fa1..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -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 final Logger logger = LoggerFactory.INSTANCE.getLogger(ResultSetProcessor.class); - - private TableRegistry registry; - - private GraphBuilderMetadata metadata; - - 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); - - if (this.logger.isDebugEnabled()) { - this.logger.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 (!rawDataFromRow.hasValidPrimaryKey()) { - continue; - } - - String tableName = rawDataFromRow.getTableName(); - DataObject tableObject = registry.get(tableName, rawDataFromRow.getPrimaryKeyValues()); - if (tableObject == null) { - tableObject = doMaker.createAndAddDataObject(rawDataFromRow, resultMetadata); - - if (this.logger.isDebugEnabled()) { - this.logger.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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java deleted file mode 100644 index 12a3e4b47f..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; -import java.util.Map; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -/** - * - * A ResultSetRow is used to transform a single row of a ResultSet into a set of EDataObjects. - */ -public class ResultSetRow { - private final Logger logger = LoggerFactory.INSTANCE.getLogger(ResultSetRow.class); - - private final ResultMetadata metadata; - - private Map tableMap = new HashMap(); - - private List allTableData; - - /** - * 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 { - - if (this.logger.isDebugEnabled()) { - this.logger.debug(""); - } - for (int i = 1; i <= metadata.getResultSetSize(); i++) { - Object data = getObject(rs, i); - - TableData table = getRawData(metadata.getTablePropertyName(i)); - if (this.logger.isDebugEnabled()) { - this.logger.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; - if (this.logger.isDebugEnabled()) { - this.logger.debug(""); - } - - while (i <= metadata.getResultSetSize()) { - if (this.logger.isDebugEnabled()) { - this.logger.debug(""); - } - TableData table = new TableData(metadata.getTablePropertyName(i)); - this.allTableData.add(table); - - while ((i <= metadata.getResultSetSize()) && (metadata.isPKColumn(i))) { - Object data = getObject(rs, i); - if (this.logger.isDebugEnabled()) { - this.logger.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); - if (this.logger.isDebugEnabled()) { - this.logger.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; - } - - 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 List getAllTableData() { - if (this.allTableData == null) { - this.allTableData = new ArrayList(); - this.allTableData.addAll(tableMap.values()); - } - - if (this.logger.isDebugEnabled()) { - this.logger.debug(allTableData); - } - - return this.allTableData; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java deleted file mode 100644 index 64809f7996..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; -import java.util.Map; - -import org.apache.log4j.Logger; -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.LoggerFactory; - -import commonj.sdo.DataObject; -import commonj.sdo.Property; - -public class RowObjects { - private final Logger logger = LoggerFactory.INSTANCE.getLogger(RowObjects.class); - - private Map objectsByTableName; - - private List tableObjects; - - 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 = metadata.getConfigWrapper(); - if (wrapper.hasRecursiveRelationships()) { - processRecursiveRelationships(wrapper); - return; - } - - Iterator i = metadata.getRelationships().iterator(); - while (i.hasNext()) { - Relationship r = (Relationship) i.next(); - - DataObject parentTable = get(wrapper.getTableTypeName(r.getPrimaryKeyTable())); - DataObject childTable = get(wrapper.getTableTypeName(r.getForeignKeyTable())); - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Parent table: " + parentTable); - this.logger.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) { - - List 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)); - } - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Trying to find parent of " + r.getForeignKeyTable() + " with FK " + fkValue); - } - - DataObject parentTable = registry.get(r.getPrimaryKeyTable(), fkValue); - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Parent table from registry: " + parentTable); - } - - return parentTable; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java deleted file mode 100644 index 72040e9834..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 { - - - public SingleTableRegistry() { - // Empty Constructor - } - - public DataObject get(String tableName, List primaryKey) { - return null; - } - - - public void put(String tableName, List primaryKey, DataObject value) { - // do nothing - - } - - public boolean contains(String name, List list) { - return false; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java deleted file mode 100644 index 35bfb591bd..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.Map; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -/** - * - */ -public class TableData { - private final Logger logger = LoggerFactory.INSTANCE.getLogger(TableData.class); - - private Map columnData = new HashMap(); - - private List primaryKey = new ArrayList(); - - private final String name; - - private boolean hasValidPrimaryKey = true; - - public TableData(String tableName) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Creating TableData for table " + tableName); - } - - this.name = tableName; - } - - public void addData(String columnName, boolean isPrimaryKeyColumn, Object data) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Adding column " + columnName + " with value " + data); - } - - columnData.put(columnName, data); - if (isPrimaryKeyColumn) { - if (data == null) { - if (this.logger.isDebugEnabled()) { - this.logger.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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java deleted file mode 100644 index 60759c90f4..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 DataObject - */ - DataObject get(String tableName, List primaryKey); - - /** - * Add the table with the specified name and primary key - * - * @param tableName - * @param primaryKey - * @param value - */ - void put(String tableName, List primaryKey, DataObject value); - - boolean contains(String name, List list); -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java deleted file mode 100644 index 1fb45243d0..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 final 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"); - } - return helper.getType("commonj.sdo", "boolean"); - - - case Types.TINYINT: - case Types.SMALLINT: - case Types.INTEGER: - if (isNullable) { - return helper.getType("commonj.sdo", "IntObject"); - } - - return helper.getType("commonj.sdo", "Int"); - - - case Types.BIGINT: - if (isNullable) { - return helper.getType("commonj.sdo", "Long"); - } - return helper.getType("commonj.sdo", "long"); - - case Types.REAL: - if (isNullable) { - return helper.getType("commonj.sdo", "Float"); - } - return helper.getType("commonj.sdo", "float"); - - - case Types.FLOAT: - case Types.DOUBLE: - if (isNullable) { - return helper.getType("commonj.sdo", "Double"); - } - 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java deleted file mode 100644 index c3b4617e7f..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.log4j.Logger; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -import commonj.sdo.DataObject; - -/** - * - */ -public class ApplyChangesCommandImpl extends BaseCommandImpl { - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(ApplyChangesCommandImpl.class); - - private ChangeSummarizer summarizer = new ChangeSummarizer(); - - public ApplyChangesCommandImpl(MappingWrapper config, Connection connection) { - this.configWrapper = config; - if (connection != null) { - setConnection(connection, config.getConfig()); - } - - } - - public void setConnection(ConnectionImpl connection) { - summarizer.setConnection(connection); - } - - public void execute(DataObject root) { - if (this.logger.isDebugEnabled()) { - this.logger.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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java deleted file mode 100644 index d1b990d421..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.config.Config; -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, Config config) { - boolean managed = true; - if (config != null && config.getConnectionInfo() != null) { - managed = config.getConnectionInfo().isManagedtx(); - } - setConnection(connection, managed); - } - - public void setConnection(Connection connection, boolean manageTransaction) { - ConnectionImpl c = new ConnectionImpl(connection); - c.setManageTransactions(manageTransaction); - setConnection(c); - } - - public abstract void setConnection(ConnectionImpl c); - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java deleted file mode 100644 index c6628d3456..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.log4j.Logger; -import org.apache.tuscany.das.rdb.config.Create; -import org.apache.tuscany.das.rdb.config.Delete; -import org.apache.tuscany.das.rdb.config.Table; -import org.apache.tuscany.das.rdb.config.Update; -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.DeleteGenerator; -import org.apache.tuscany.das.rdb.generator.impl.InsertGenerator; -import org.apache.tuscany.das.rdb.generator.impl.UpdateGenerator; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -import commonj.sdo.DataObject; - -public class ChangeFactory { - private final Logger logger = LoggerFactory.INSTANCE.getLogger(ChangeFactory.class); - - private InsertCommandImpl createCommand; - - private UpdateCommandImpl updateCommand; - - private DeleteCommandImpl deleteCommand; - - private final MappingWrapper mapping; - - private final ConnectionImpl connection; - - public ChangeFactory(MappingWrapper mapping, ConnectionImpl connection) { - this.mapping = mapping; - this.connection = connection; - } - - public void setCreateCommand(InsertCommandImpl cmd) { - createCommand = cmd; - } - - public void setUpdateCommand(UpdateCommandImpl cmd) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Setting Update Command to " + cmd); - } - - updateCommand = cmd; - } - - public void setDeleteCommand(DeleteCommandImpl cmd) { - deleteCommand = cmd; - } - - 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); - } - - private InsertCommandImpl getCreateCommand(DataObject changedObject) { - - if (createCommand == null) { - Table table = mapping.getTableByTypeName(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.getTableByTypeName(changedObject.getType().getName()); - } else { - throw new RuntimeException("Table " + changedObject.getType().getName() - + " was changed in the DataGraph but is not present in the Config"); - } - } - - Create create = table.getCreate(); - - if (create == null) { - createCommand = InsertGenerator.INSTANCE.getInsertCommand(mapping, changedObject, table); - } else { - createCommand = new InsertCommandImpl(create); - } - createCommand.setConnection(connection); - createCommand.configWrapper = mapping; - } - return createCommand; - } - - private DeleteCommandImpl getDeleteCommand(DataObject changedObject) { - - if (deleteCommand == null) { - Table table = mapping.getTableByTypeName(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.getTableByTypeName(changedObject.getType().getName()); - } else { - throw new RuntimeException("Table " + changedObject.getType().getName() - + " was changed in the DataGraph but is not present in the Config"); - } - } - - Delete delete = table.getDelete(); - - if (delete == null) { - deleteCommand = DeleteGenerator.INSTANCE.getDeleteCommand(table); - } else { - deleteCommand = new DeleteCommandImpl(delete); - } - deleteCommand.setConnection(connection); - deleteCommand.configWrapper = mapping; - } - return deleteCommand; - } - - private UpdateCommandImpl getUpdateCommand(DataObject changedObject) { - - if (updateCommand == null) { - Table table = mapping.getTableByTypeName(changedObject.getType().getName()); - if (table == null) { - if (changedObject.getType().getProperty("ID") != null) { - mapping.addPrimaryKey(changedObject.getType().getName() + ".ID"); - table = mapping.getTableByTypeName(changedObject.getType().getName()); - } else { - throw new RuntimeException("Table " + changedObject.getType().getName() - + " was changed in the DataGraph but is not present in the Config"); - } - } - Update update = table.getUpdate(); - if (update == null) { - updateCommand = UpdateGenerator.INSTANCE.getUpdateCommand(mapping, changedObject, table); - } else { - TableWrapper t = new TableWrapper(table); - if (t.getCollisionColumn() != null) { - updateCommand = new OptimisticWriteCommandImpl(update); - } else { - updateCommand = new UpdateCommandImpl(update); - } - } - updateCommand.setConnection(connection); - updateCommand.configWrapper = mapping; - } - if (this.logger.isDebugEnabled()) { - this.logger.debug("Returning updateCommand: " + updateCommand); - } - - return updateCommand; - } - - public MappingWrapper getConfig() { - return this.mapping; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java deleted file mode 100644 index ca44591213..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -import commonj.sdo.DataObject; - -/** - */ -public abstract class ChangeOperation { - protected DatabaseObject dObject; - - protected String propagatedID; - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(ChangeOperation.class); - - private final WriteCommandImpl writeCommand; - - private boolean isInsert; - - - 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() { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Executing change operation"); - } - - Iterator i = writeCommand.getParameters().iterator(); - while (i.hasNext()) { - ParameterImpl parm = (ParameterImpl) i.next(); - - if (this.logger.isDebugEnabled()) { - this.logger.debug("setting " + parm.getName() + " to " + dObject.get(parm.getName())); - } - - parm.setValue(dObject.get(parm.getName())); - } - - writeCommand.execute(); - - if (isInsert && (propagatedID != null)) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Propagating key " + propagatedID); - } - int id = writeCommand.getGeneratedKey(); - dObject.setPropagatedID(propagatedID, id); - } - } - - public String getTableName() { - return dObject.getTableName(); - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java deleted file mode 100644 index 49785b423d..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.Map; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.Command; -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.RelationshipWrapper; -import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper; -import org.apache.tuscany.das.rdb.util.LoggerFactory; -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 final Logger logger = LoggerFactory.INSTANCE.getLogger(ChangeSummarizer.class); - - private Changes changes = new Changes(); - - private FactoryRegistry registry; - - private MappingWrapper mapping = new MappingWrapper(); - - private ConnectionImpl connection; - - private Map 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(); - - if (this.logger.isDebugEnabled()) { - this.logger.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)) { - if (this.logger.isDebugEnabled()) { - this.logger.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()); - if (this.logger.isDebugEnabled()) { - this.logger.debug("Change is a delete"); - } - changes.addDelete(factory.createDeleteOperation(changedObject)); - } else { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Change is a modify"); - } - List attrList = changeSummary.getOldValues(changedObject); - if (hasAttributeChange(attrList)) { - ChangeFactory factory = getRegistry().getFactory(changedObject.getType()); - if (this.logger.isDebugEnabled()) { - this.logger.debug("Attribute Change for " + changedObject.getType().getName()); - } - String propagatedID = (String) generatedKeys.get(changedObject.getType().getName()); - changes.addUpdate(factory.createUpdateOperation(changedObject, propagatedID)); - } else { - List values = changeSummary.getOldValues(changedObject); - Iterator i = values.iterator(); - while (i.hasNext()) { - ChangeSummary.Setting setting = (ChangeSummary.Setting) i.next(); - if (!setting.getProperty().getType().isDataType()) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Reference change for " + changedObject.getType().getName()); - } - Property ref = setting.getProperty(); - if (this.logger.isDebugEnabled()) { - this.logger.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; - } - - 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()) { - if (rel.isKeyRestricted()) { - throw new RuntimeException("Can not modify a one to one relationship that is key restricted"); - } - // This is a one-one relationship - Table t = mapping.getTableByTypeName(changedObject.getType().getName()); - TableWrapper tw = new TableWrapper(t); - RelationshipWrapper rw = new RelationshipWrapper(rel); - if ((rel.getForeignKeyTable().equals(t.getTableName())) - && (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()) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("adding generated key " + t.getTableName() + "." + c.getColumnName()); - } - - generatedKeys.put(t.getTableName(), c.getColumnName()); - } - } - } - } - - public ConnectionImpl getConnection() { - return this.connection; - } -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java deleted file mode 100644 index 2cc5f906c9..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; - -/** - * Manages 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(List insertOrder) { - inserts.setOrder(insertOrder); - } - - public void setDeleteOrder(List deleteOrder) { - deletes.setOrder(deleteOrder); - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java deleted file mode 100644 index 8c5658935f..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 commonj.sdo.DataObject; -import commonj.sdo.helper.XSDHelper; - -public abstract class CommandImpl extends BaseCommandImpl implements Command { - - protected Statement statement; - - protected Parameters parameters = new Parameters(); - - - - 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 setParameter(int index, Object value) { - parameters.setParameter(index, value); - } - - public void addParameter(ParameterImpl param) { - parameters.add(param); - } - - public List getParameters() { - return parameters.parameterList(); - } - - public Object getParameter(int index) { - return parameters.parameterWithIndex(index).getValue(); - } - - public void setConnection(ConnectionImpl connection) { - statement.setConnection(connection); - } - - protected ConnectionImpl getConnection() { - return statement.getConnection(); - } - - /* - * The default impl is to throw an exception. This is overridden by InsertCommandImpl - */ - public int getGeneratedKey() { - - throw new RuntimeException("This method is only valid for insert commands"); - } - - public void close() { - statement.close(); - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java deleted file mode 100644 index d3a2c77844..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DatabaseMetaData; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -public class ConnectionImpl { - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(ConnectionImpl.class); - - private Connection connection; - - private boolean managingTransaction = true; - - private final boolean useGetGeneratedKeys; - - public ConnectionImpl(Connection connection) { - this.connection = connection; - - try { - DatabaseMetaData dbmd = connection.getMetaData(); - - if (dbmd.getDatabaseProductName().contains("Oracle")) { - this.useGetGeneratedKeys = false; - } else { - this.useGetGeneratedKeys = true; - } - 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) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Committing Transaction"); - } - connection.commit(); - } - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public void errorCleanUp() { - try { - if (managingTransaction) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Rolling back Transaction"); - } - connection.rollback(); - } - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public PreparedStatement prepareStatement(String queryString, String[] returnKeys) throws SQLException { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Preparing Statement: " + queryString); - } - - if (useGetGeneratedKeys) { - return connection.prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS); - } else if (returnKeys.length > 0) { - return connection.prepareStatement(queryString, returnKeys); - } - - return connection.prepareStatement(queryString); - } - - public PreparedStatement preparePagedStatement(String queryString) throws SQLException { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Preparing Statement: " + queryString); - } - - return connection.prepareStatement(queryString, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - } - - public void setManageTransactions(boolean manageTransactions) { - managingTransaction = manageTransactions; - - } - - public CallableStatement prepareCall(String queryString) throws SQLException { - return connection.prepareCall(queryString); - } - - public boolean useGetGeneratedKeys() { - return this.useGetGeneratedKeys; - } -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java deleted file mode 100644 index 0163f96686..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java deleted file mode 100644 index ba80b3bcb5..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.DASFactory; -import org.apache.tuscany.das.rdb.config.Config; - -public class DASFactoryImpl implements DASFactory { - - public DAS createDAS(InputStream configStream) { - return new DASImpl(configStream); - } - - public DAS createDAS(Config config) { - return new DASImpl(config); - } - - public DAS createDAS(InputStream configStream, Connection connection) { - return new DASImpl(configStream, connection); - } - - public DAS createDAS(Config config, Connection connection) { - return new DASImpl(config, connection); - } - - public DAS createDAS(Connection connection) { - return new DASImpl(connection); - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java deleted file mode 100644 index 55f8e2c83b..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.SQLException; -import java.util.Collections; -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.Command; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.config.Config; -import org.apache.tuscany.das.rdb.config.ConfigFactory; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.util.ConfigUtil; - -import commonj.sdo.DataObject; - -/** - * An ConfiguredCommandFactory produces instances of Command and ApplyChangesCommand. This - * factory is initialized with a configuration that defines - * the commands it produces. - * - */ -public class DASImpl implements DAS { - - private MappingWrapper configWrapper; - - private Connection connection; - - private Map commands = new HashMap(); - - public DASImpl(InputStream stream) { - this(ConfigUtil.loadConfig(stream)); - - } - - public DASImpl(Config inConfig) { - Config cfg = inConfig; - if (cfg == null) { - cfg = ConfigFactory.INSTANCE.createConfig(); - } - this.configWrapper = new MappingWrapper(cfg); - - Iterator i = configWrapper.getConfig().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")) { - commands - .put(commandConfig.getName(), new ReadCommandImpl(commandConfig.getSQL(), - configWrapper, commandConfig.getResultDescriptor())); - } 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(), new String[0])); - } else if (kind.equalsIgnoreCase("delete")) { - commands.put(commandConfig.getName(), new DeleteCommandImpl(commandConfig.getSQL())); - } else if (kind.equalsIgnoreCase("procedure")) { - commands.put(commandConfig.getName(), new SPCommandImpl(commandConfig.getSQL(), - configWrapper, commandConfig.getParameter())); - } else { - throw new RuntimeException("Invalid kind of command: " + kind); - } - - } - - } - - public DASImpl(Config inConfig, Connection inConnection) { - this(inConfig); - setConnection(inConnection); - } - - public DASImpl(InputStream configStream, Connection inConnection) { - this(ConfigUtil.loadConfig(configStream), inConnection); - } - - public DASImpl(Connection inConnection) { - this(ConfigFactory.INSTANCE.createConfig()); - setConnection(inConnection); - } - - /* - * (non-Javadoc) - * - * @see org.apache.tuscany.das.rdb.CommandGroup#getApplyChangesCommand() - */ - public ApplyChangesCommandImpl getApplyChangesCommand() { - ApplyChangesCommandImpl cmd = new ApplyChangesCommandImpl(configWrapper, 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); - } - CommandImpl cmd = (CommandImpl) commands.get(name); - cmd.setConnection(getConnection(), configWrapper.getConfig()); - return cmd; - } - - public void setConnection(Connection connection) { - this.connection = connection; - } - - public Connection getConnection() { - if (connection == null) { - initializeConnection(); - } - return connection; - } - - private void initializeConnection() { - Config config = configWrapper.getConfig(); - if (config == null || config.getConnectionInfo() == null - || config.getConnectionInfo().getDataSource() == null) { - throw new RuntimeException("No connection has been provided and no data source has been specified"); - } - - Connection connection = null; - - InitialContext ctx; - try { - ctx = new InitialContext(); - } catch (NamingException e) { - throw new RuntimeException(e); - } - try { - DataSource ds = (DataSource) ctx.lookup(configWrapper.getConfig().getConnectionInfo().getDataSource()); - try { - connection = ds.getConnection(); - if (connection == null) { - throw new RuntimeException("Could not obtain a Connection from DataSource"); - } - connection.setAutoCommit(false); - setConnection(connection); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } catch (NamingException e) { - throw new RuntimeException(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 "managing" the connection via DataSource - */ - private boolean managingConnections() { - - if (configWrapper.getConfig().getConnectionInfo().getDataSource() == null) { - return false; - } - - return true; - - } - - public Command createCommand(String sql) { - return baseCreateCommand(sql, this.configWrapper); - } - - public Command createCommand(String sql, Config config) { - return baseCreateCommand(sql, new MappingWrapper(config)); - } - - private Command baseCreateCommand(String inSql, MappingWrapper config) { - CommandImpl returnCmd = null; - String sql = inSql.trim(); // Remove leading white space - char firstChar = Character.toUpperCase(sql.charAt(0)); - switch (firstChar) { - case 'S': - returnCmd = new ReadCommandImpl(sql, config, null); - break; - case 'I': - returnCmd = new InsertCommandImpl(sql, new String[0]); - break; - case 'U': - returnCmd = new UpdateCommandImpl(sql); - break; - case 'D': - returnCmd = new DeleteCommandImpl(sql); - break; - case '{': - returnCmd = new SPCommandImpl(sql, config, Collections.EMPTY_LIST); - break; - default: - throw new RuntimeException("SQL => " + sql + " is not valid"); - } - - returnCmd.setConnection(getConnection(), config.getConfig()); - return returnCmd; - } - - public void applyChanges(DataObject root) { - getApplyChangesCommand().execute(root); - } - -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java deleted file mode 100644 index de42b595b4..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.Map; - -import org.apache.log4j.Logger; -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.LoggerFactory; - -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 Logger logger = LoggerFactory.INSTANCE.getLogger(DatabaseObject.class); - - private final MappingWrapper mappingWrapper; - - private final DataObject dataObject; - - private Property parentReference; - - private Map 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(); - if (this.logger.isDebugEnabled()) { - this.logger.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.getTableByTypeName(getTypeName()).getTableName(); - } - 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java deleted file mode 100644 index 78e38cee0b..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.config.Delete; - -public class DeleteCommandImpl extends WriteCommandImpl { - - public DeleteCommandImpl(String sqlString) { - super(sqlString); - } - - public DeleteCommandImpl(Delete delete) { - super(delete.getSql()); - addParameters(delete.getParameters()); - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java deleted file mode 100644 index feb7e31411..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; -import java.util.Map; - -/** - * DeleteList will sort delete operations so that child objects are deleted before their parents - * - * - */ -public class DeleteList { - - private Map opsByTableName = new HashMap(); - - private List order; - - private List deleteOperations = new ArrayList(); - - public DeleteList() { - super(); - } - - public void add(ChangeOperation op) { - if ((order.size() == 0) || (op.getTableName() == null)) { - deleteOperations.add(op); - } else { - String name = op.getTableName(); - List ops = (List) opsByTableName.get(name); - if (ops == null) { - ops = new ArrayList(); - } - ops.add(op); - opsByTableName.put(name, ops); - } - } - - public Collection getSortedList() { - if ((order.size() > 0) && (opsByTableName.keySet().size() > 0)) { - Iterator i = this.order.iterator(); - while (i.hasNext()) { - String name = (String) i.next(); - if (opsByTableName.get(name) != null) { - deleteOperations.addAll((Collection) opsByTableName.get(name)); - } - } - } - - return deleteOperations; - } - - public void setOrder(List deleteOrder) { - this.order = deleteOrder; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java deleted file mode 100644 index 52935599c1..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java deleted file mode 100644 index 9e4a4b47b5..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Map; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -import commonj.sdo.Type; - -public class FactoryRegistry { - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(FactoryRegistry.class); - - private Map registry = new HashMap(); - - 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) { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Creating new ChangeFactory for type " + type.getName()); - } - - factory = new ChangeFactory(mapping, connection); - registry.put(type, factory); - } - return factory; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java deleted file mode 100644 index 048ee7fef5..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 org.apache.tuscany.das.rdb.config.Create; - -public class InsertCommandImpl extends WriteCommandImpl { - - private String[] keys; - - public InsertCommandImpl(String sqlString, String[] generatedKeys) { - super(sqlString); - keys = generatedKeys; - } - - public InsertCommandImpl(Create create) { - super(create.getSql()); - addParameters(create.getParameters()); - this.keys = new String[0]; - } - - public void execute() { - - boolean success = false; - try { - statement.executeUpdate(parameters, keys); - success = true; - } catch (SQLException e) { - throw new RuntimeException(e); - } finally { - if (success) { - statement.getConnection().cleanUp(); - } else { - statement.getConnection().errorCleanUp(); - } - } - - } - - public int getGeneratedKey() { - try { - return statement.getGeneratedKey(); - } catch (SQLException ex) { - throw new RuntimeException(ex); - } - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java deleted file mode 100644 index dea65feb3c..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; -import java.util.Map; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -/** - * InsertList will sort ChangeOperation objects so that parents are inserted before children - * - * - */ -public class InsertList { - private final Logger logger = LoggerFactory.INSTANCE.getLogger(InsertList.class); - - private Map opsByTableName = new HashMap(); - - private List insertOperations = new ArrayList(); - - private List order; - - public void add(ChangeOperation op) { - if (this.logger.isDebugEnabled()) { - this.logger.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(); - List ops = (List) opsByTableName.get(name); - if (ops == null) { - ops = new ArrayList(); - } - - ops.add(op); - opsByTableName.put(name, ops); - } - } - - public Collection getSortedList() { - if (this.logger.isDebugEnabled()) { - this.logger.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(); - if (this.logger.isDebugEnabled()) { - this.logger.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)); - } - } - } - if (this.logger.isDebugEnabled()) { - this.logger.debug("Returning " + insertOperations.size() + " insert operations"); - } - - return insertOperations; - } - - public void setOrder(List insertOrder) { - this.order = insertOrder; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java deleted file mode 100644 index d91200fd03..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.math.BigDecimal; - -public class ManagedParameterImpl extends ParameterImpl { - - public void setValue(Object oldValue) { - this.value = updateValue(oldValue); - } - - private Object updateValue(Object oldValue) { - if (oldValue instanceof Integer) { - return Integer.valueOf(((Integer) oldValue).intValue() + 1); - } else if (oldValue instanceof BigDecimal) { - return ((BigDecimal) oldValue).add(new BigDecimal(1)); - } else { - throw new RuntimeException("Unsupported type for managed column: " + oldValue.getClass().getName()); - } - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java deleted file mode 100644 index a1ced26ecf..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 org.apache.tuscany.das.rdb.config.Update; - -public class OptimisticWriteCommandImpl extends UpdateCommandImpl { - - public OptimisticWriteCommandImpl(String sqlString) { - super(sqlString); - } - - public OptimisticWriteCommandImpl(Update update) { - super(update); - addParameters(update.getParameters()); - } - - public void execute() { - - boolean success = false; - try { - int rowsAffected = statement.executeUpdate(parameters); - success = true; - if (rowsAffected == 0) { - throw new RuntimeException("An update collision occurred"); - } - } catch (SQLException e) { - throw new RuntimeException(e); - } finally { - if (success) { - statement.getConnection().cleanUp(); - } else { - statement.getConnection().errorCleanUp(); - } - } - - } -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java deleted file mode 100644 index 27b653763b..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java deleted file mode 100644 index 3e23faf069..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 commonj.sdo.Type; - -public class ParameterImpl { - - /** - * Value for "Direction" that indicates that a parameter is soley for input. - */ - static final int IN = 1; - - /** - * Value for "Direction" that indicates that a parameter is soley for output. - * Out parameters only apply to Stored Procedures - */ - static final 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 - */ - static final int IN_OUT = 3; - - protected Object value; - - private int index; - - private Type type; - - private String name; - - private int direction = IN; - - private Converter converter; - - - public ParameterImpl() { - super(); - } - - 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); - } - - return this.value; - } - - public int getDirection() { - return this.direction; - } - - public void setConverter(Converter converter) { - this.converter = converter; - } - - public Converter getConverter() { - return this.converter; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java deleted file mode 100644 index 3f38687942..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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; -import java.util.List; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -import commonj.sdo.Type; - -public class Parameters { - private final Logger logger = LoggerFactory.INSTANCE.getLogger(Parameters.class); - - private List parameters = new ArrayList(); - - private List inParams = new ArrayList(); - - private List outParams = new ArrayList(); - - public Parameters() { - super(); - } - - public ParameterImpl get(int index) { - return (ParameterImpl) parameters.get(index); - } - - public List outParams() { - return outParams; - } - - public List inParams() { - return inParams; - } - - private void addParameter(ParameterImpl param) { - if (param.getDirection() == ParameterImpl.IN) { - inParams.add(param); - } else if ((param.getDirection() == ParameterImpl.OUT) || (param.getDirection() == ParameterImpl.IN_OUT)) { - outParams.add(param); - } - - this.parameters.add(param); - } - - public void add(ParameterImpl param) { - addParameter(param); - } - - public ParameterImpl findOrCreateParameterWithIndex(int index, int direction, Type sdoType) { - Iterator i = parameters.iterator(); - while (i.hasNext()) { - ParameterImpl param = (ParameterImpl) i.next(); - - if (param.getIndex() == index) { - return param; - } - } - if (this.logger.isDebugEnabled()) { - this.logger.debug("Creating new parameter with index " + index); - } - - ParameterImpl newParam = new ParameterImpl(index); - newParam.setDirection(direction); - newParam.setType(sdoType); - addParameter(newParam); - return newParam; - } - - public List parameterList() { - return parameters; - } - - public ParameterImpl findOrCreateParameterWithIndex(int index) { - return findOrCreateParameterWithIndex(index, ParameterImpl.IN, null); - } - - public void setParameter(int index, Object value) { - ParameterImpl param = findOrCreateParameterWithIndex(index); - param.setValue(value); - } - - public ParameterImpl parameterWithIndex(int index) { - Iterator i = parameters.iterator(); - while (i.hasNext()) { - ParameterImpl param = (ParameterImpl) i.next(); - - if (param.getIndex() == index) { - return param; - } - } - return null; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java deleted file mode 100644 index 725285048d..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.List; - -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; - -public class ReadCommandImpl extends CommandImpl { - - private int startRow = 1; - - private int endRow = Integer.MAX_VALUE; - - public ReadCommandImpl(String sqlString, MappingWrapper mapping, List resultDescriptor) { - super(sqlString); - this.configWrapper = mapping; - - if (resultDescriptor != null && !resultDescriptor.isEmpty()) { - this.resultSetShape = new ResultSetShape(resultDescriptor); - } - } - - - 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 { - List results = statement.executeQuery(parameters); - success = true; - return buildGraph(results); - } catch (SQLException e) { - throw new RuntimeException(e); - } finally { - if (success) { - statement.getConnection().cleanUp(); - } else { - statement.getConnection().errorCleanUp(); - } - } - } - - protected DataObject buildGraph(List results) throws SQLException { - - // Before we use the mappingModel, do some checking/updating. If - // inferrable information - // isn't specified, add it in. - - GraphBuilderMetadata gbmd = new GraphBuilderMetadata(results, configWrapper.getConfig(), - resultSetShape); - - // Create the DataGraph - DataGraph g = SDOUtil.createDataGraph(); - - // Create the root object - g.createRootObject(gbmd.getRootType()); - - SDOUtil.registerDataGraphTypes(g, gbmd.getDefinedTypes()); - - ChangeSummary summary = g.getChangeSummary(); - - ResultSetProcessor rsp = new ResultSetProcessor(g.getRootObject(), gbmd); - rsp.processResults(getStartRow(), getEndRow()); - - summary.beginLogging(); - - return g.getRootObject(); - } - - - 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; - } - - - protected void enablePaging() { - statement.enablePaging(); - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java deleted file mode 100644 index a47b7cd7be..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.ResultSetMetaData; -import java.sql.SQLException; -import java.util.List; - -import org.apache.tuscany.das.rdb.config.ResultDescriptor; -import org.apache.tuscany.das.rdb.graphbuilder.schema.ResultSetTypeMap; - -import commonj.sdo.Type; -import commonj.sdo.helper.TypeHelper; - -/** - * 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. - *

- * 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(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 ResultSetShape(List resultDescriptor) { - TypeHelper helper = TypeHelper.INSTANCE; - int size = resultDescriptor.size(); - columns = new String[size]; - tables = new String[size]; - types = new Type[size]; - - for (int i = 0; i < size; i++) { - ResultDescriptor desc = (ResultDescriptor) resultDescriptor.get(i); - tables[i] = desc.getTableName(); - columns[i] = desc.getColumnName(); - - int idx = desc.getColumnType().lastIndexOf('.'); - String uri = desc.getColumnType().substring(0, idx); - String typeName = desc.getColumnType().substring(idx + 1); - - types[i] = helper.getType(uri, typeName); - if (types[i] == null) { - throw new RuntimeException("Could not find type " + desc.getColumnType() - + " for column " + desc.getColumnName()); - } - } - - } - - 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java deleted file mode 100644 index 1038c9a99a..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 commonj.sdo.Type; - -public final class SDODataTypeHelper { - - private SDODataTypeHelper() { - - } - - public static int sqlTypeFor(Type sdoType) { - if (sdoType == null) { - return Types.OTHER; - } - - 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java deleted file mode 100644 index 2052950272..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Type; -import commonj.sdo.helper.TypeHelper; - -/** - * Defines SDO data types. This is used primalirly to type stored procedure OUT parameters. - * - */ -public class SDODataTypes { - - public static final TypeHelper TYPE_HELPER = TypeHelper.INSTANCE; - - public static final Type BOOLEAN = TYPE_HELPER.getType("commonj.sdo", "Boolean"); - - public static final Type BYTE = TYPE_HELPER.getType("commonj.sdo", "Byte"); - - public static final Type BYTES = TYPE_HELPER.getType("commonj.sdo", "Bytes"); - - public static final Type CHARACTER = TYPE_HELPER.getType("commonj.sdo", "Character"); - - public static final Type DATE = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type DATETIME = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type DAY = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type DECIMAL = TYPE_HELPER.getType("commonj.sdo", "Float"); - - public static final Type DOUBLE = TYPE_HELPER.getType("commonj.sdo", "Double"); - - public static final Type DURATION = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type FLOAT = TYPE_HELPER.getType("commonj.sdo", "Float"); - - public static final Type INT = TYPE_HELPER.getType("commonj.sdo", "Int"); - - public static final Type INTEGER = TYPE_HELPER.getType("commonj.sdo", "Integer"); - - public static final Type LONG = TYPE_HELPER.getType("commonj.sdo", "Long"); - - public static final Type MONTH = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type MONTHDAY = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type OBJECT = TYPE_HELPER.getType("commonj.sdo", "Object"); - - public static final Type SHORT = TYPE_HELPER.getType("commonj.sdo", "Short"); - - public static final Type STRING = TYPE_HELPER.getType("commonj.sdo", "String"); - - public static final Type STRINGS = TYPE_HELPER.getType("commonj.sdo", "String"); - - public static final Type TIME = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type URI = TYPE_HELPER.getType("commonj.sdo", "String"); - - public static final Type YEAR = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type YEARMONTH = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type YEARMONTHDAY = TYPE_HELPER.getType("commonj.sdo", "Date"); - - public static final Type BOOLEANOBJECT = TYPE_HELPER.getType("commonj.sdo", "BooleanObject"); - - public static final Type BYTEOBJECT = TYPE_HELPER.getType("commonj.sdo", "ByteObject"); - - public static final Type CHARACTEROBJECT = TYPE_HELPER.getType("commonj.sdo", "CharacterObject"); - - public static final Type DOUBLEOBJECT = TYPE_HELPER.getType("commonj.sdo", "DoubleObject"); - - public static final Type FLOATOBJECT = TYPE_HELPER.getType("commonj.sdo", "FloatObject"); - - public static final Type INTEGEROBJECT = TYPE_HELPER.getType("commonj.sdo", "IntObject"); - - public static final Type LONGOBJECT = TYPE_HELPER.getType("commonj.sdo", "LongObject"); - - public static final Type SHORTOBJECT = TYPE_HELPER.getType("commonj.sdo", "ShortObject"); - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java deleted file mode 100644 index 676fb215b6..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Iterator; -import java.util.List; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.config.Parameter; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -import commonj.sdo.DataObject; -import commonj.sdo.Type; -import commonj.sdo.helper.TypeHelper; - -public class SPCommandImpl extends ReadCommandImpl { - private final Logger logger = LoggerFactory.INSTANCE.getLogger(SPCommandImpl.class); - - public SPCommandImpl(String sqlString, MappingWrapper config, List params) { - super(sqlString, config, null); - Iterator i = params.iterator(); - for (int idx = 1; i.hasNext(); idx++) { - Parameter p = (Parameter) i.next(); - - int index = p.getColumnType().lastIndexOf('.'); - String pkg = p.getColumnType().substring(0, index); - String typeName = p.getColumnType().substring(index + 1); - - Type sdoType = TypeHelper.INSTANCE.getType(pkg, typeName); - - int direction = ParameterImpl.IN; - if ("OUT".equalsIgnoreCase(p.getDirection())) { - direction = ParameterImpl.OUT; - } else if ("INOUT".equalsIgnoreCase(p.getDirection())) { - direction = ParameterImpl.IN_OUT; - } - parameters.findOrCreateParameterWithIndex(idx, direction, sdoType); - } - - } - - public DataObject executeQuery() { - - boolean success = false; - try { - List results = statement.executeCall(parameters); - success = true; - - return buildGraph(results); - } catch (SQLException e) { - if (this.logger.isDebugEnabled()) { - this.logger.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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java deleted file mode 100644 index 4740684fbc..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.ParameterMetaData; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import org.apache.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -// TODO - Can use some refactoring. Much code is duplicated in "execute" methods -public class Statement { - - protected final String queryString; - - protected ConnectionImpl jdbcConnection; - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(Statement.class); - - private PreparedStatement preparedStatement; - - private boolean isPaging; - - public Statement(String sqlString) { - this.queryString = sqlString; - } - - public List executeQuery(Parameters parameters) throws SQLException { - - PreparedStatement ps = getPreparedStatement(new String[0]); - ps = setParameters(ps, parameters); - ResultSet rs = ps.executeQuery(); - - return Collections.singletonList(rs); - } - - public List executeCall(Parameters parameters) throws SQLException { - - CallableStatement cs = jdbcConnection.prepareCall(queryString); - - Iterator inParams = parameters.inParams().iterator(); - while (inParams.hasNext()) { - ParameterImpl param = (ParameterImpl) inParams.next(); - cs.setObject(param.getIndex(), param.getValue()); - } - - // register out parameters - Iterator outParams = parameters.outParams().iterator(); - while (outParams.hasNext()) { - ParameterImpl param = (ParameterImpl) outParams.next(); - if (this.logger.isDebugEnabled()) { - this.logger.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(); - List results = new ArrayList(); - results.add(cs.getResultSet()); - while (cs.getMoreResults(java.sql.Statement.KEEP_CURRENT_RESULT)) { - results.add(cs.getResultSet()); - } - - Iterator i = parameters.outParams().iterator(); - while (i.hasNext()) { - ParameterImpl param = (ParameterImpl) i.next(); - param.setValue(cs.getObject(param.getIndex())); - } - - return results; - - } - - public void executeUpdateCall(Parameters parameters) throws SQLException { - CallableStatement cs = jdbcConnection.prepareCall(queryString); - - Iterator inParams = parameters.inParams().iterator(); - while (inParams.hasNext()) { - ParameterImpl param = (ParameterImpl) inParams.next(); - cs.setObject(param.getIndex(), param.getValue()); - } - - // register out parameters - Iterator outParams = parameters.outParams().iterator(); - while (outParams.hasNext()) { - ParameterImpl param = (ParameterImpl) outParams.next(); - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Registering parameter " + param.getName()); - } - - cs.registerOutParameter(param.getIndex(), SDODataTypeHelper.sqlTypeFor(param.getType())); - } - - cs.execute(); - - Iterator out = parameters.outParams().iterator(); - while (out.hasNext()) { - ParameterImpl param = (ParameterImpl) out.next(); - param.setValue(cs.getObject(param.getIndex())); - } - - } - - public int executeUpdate(Parameters parameters, String[] generatedKeys) throws SQLException { - return executeUpdate(getPreparedStatement(generatedKeys), parameters); - } - - public int executeUpdate(Parameters parameters) throws SQLException { - return executeUpdate(parameters, new String[0]); - } - - /** - * TODO - We need to look at using specific ps.setXXX methods when a type - * has been specified and try setObject otherwise. - */ - private int executeUpdate(PreparedStatement ps, Parameters parameters) throws SQLException { - if (this.logger.isDebugEnabled()) { - this.logger.debug("Executing statement " + queryString); - } - - Iterator i = parameters.inParams().iterator(); - while (i.hasNext()) { - ParameterImpl param = (ParameterImpl) i.next(); - - Object value = param.getValue(); - if (this.logger.isDebugEnabled()) { - this.logger.debug("Setting parameter " + param.getIndex() + " to " + value); - } - - if (value == null) { - if (param.getType() == null) { - try { - ParameterMetaData pmd = ps.getParameterMetaData(); - ps.setNull(param.getIndex(), pmd.getParameterType(param.getIndex())); - } catch (SQLException ex) { - ps.setNull(param.getIndex(), SDODataTypeHelper.sqlTypeFor(null)); - } - } else { - 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()) { - ParameterImpl param = (ParameterImpl) i.next(); - 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(String[] returnKeys) throws SQLException { - - if (preparedStatement == null) { - if (isPaging) { - preparedStatement = jdbcConnection.preparePagedStatement(queryString); - } else { - preparedStatement = jdbcConnection.prepareStatement(queryString, returnKeys); - } - } - - return preparedStatement; - } - - public Integer getGeneratedKey() throws SQLException { - - if (getConnection().useGetGeneratedKeys()) { - ResultSet rs = preparedStatement.getGeneratedKeys(); - if (rs.next()) { - return Integer.valueOf(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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java deleted file mode 100644 index 11a78bb5d1..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.config.Update; - -public class UpdateCommandImpl extends WriteCommandImpl { - - public UpdateCommandImpl(String sqlString) { - super(sqlString); - } - - public UpdateCommandImpl(Update update) { - super(update.getSql()); - addParameters(update.getParameters()); - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java deleted file mode 100644 index e7bb58698c..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.List; - -/** - * Updates don't have to be sorted, so this class is a simple wrapper of ArrayList. - * - */ -public class UpdateList { - - private List updates = new ArrayList(); - - public UpdateList() { - super(); - } - - public void add(ChangeOperation c) { - updates.add(c); - } - - public Collection getSortedList() { - return updates; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java deleted file mode 100644 index 1bcf3441b6..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java deleted file mode 100644 index a1efe3afee..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.StringTokenizer; - -import org.apache.tuscany.das.rdb.config.Config; - -import commonj.sdo.DataObject; - -public abstract class WriteCommandImpl extends CommandImpl { - - - public WriteCommandImpl(String sqlString) { - super(sqlString); - } - - public void execute() { - - boolean success = false; - try { - statement.executeUpdate(parameters); - 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(); - } - - public String toString() { - - StringBuffer buffer = new StringBuffer(); - buffer.append("\nSQL: " + statement.queryString); - - return buffer.toString(); - } - - public int getGeneratedKey() { - throw new RuntimeException("No generated key is available"); - } - - public void addParameters(String parameters) { - StringTokenizer tokenizer = new StringTokenizer(parameters); - for (int idx = 1; tokenizer.hasMoreTokens(); idx++) { - ParameterImpl p = new ParameterImpl(); - p.setName(tokenizer.nextToken()); - p.setIndex(idx); - addParameter(p); - } - } - - - -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java deleted file mode 100644 index a3389b9721..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Map; -import java.util.logging.Logger; - -import org.apache.tuscany.das.rdb.config.Config; -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 org.apache.tuscany.sdo.util.SDOUtil; - -import commonj.sdo.ChangeSummary; -import commonj.sdo.DataGraph; -import commonj.sdo.DataObject; -import commonj.sdo.Property; -import commonj.sdo.Type; -import commonj.sdo.helper.TypeHelper; - -public class GraphMerger { - - private static Logger logger = Logger.getLogger("GraphMerger"); - - private Map keys = new HashMap(); - - private TableRegistry registry = new MultiTableRegistry(); - - // TODO lots of cleanup/design - public GraphMerger() { - // Empty Constructor - } - - // TODO Replace EMF reference with SDOUtil function when available - // (Tuscany-583) - public DataObject emptyGraph(Config config) { - - if (config.getDataObjectModel() == null) { - throw new RuntimeException("DataObjectModel must be specified in the Config"); - } - - String uri = "http:///org.apache.tuscany.das.rdb/das"; - TypeHelper typeHelper = SDOUtil.createTypeHelper(); - Type rootType = SDOUtil.createType(typeHelper, uri + "/DataGraphRoot", "DataGraphRoot", false); - - List types = SDOUtil.getTypes(typeHelper, config.getDataObjectModel()); - if (types == null) { - throw new RuntimeException("SDO Types have not been registered for URI " + config.getDataObjectModel()); - } - - Iterator i = types.iterator(); - while (i.hasNext()) { - Type type = (Type) i.next(); - Property property = SDOUtil.createProperty(rootType, type.getName(), type); - SDOUtil.setContainment(property, true); - SDOUtil.setMany(property, true); - } - - // Create the DataGraph - DataGraph g = SDOUtil.createDataGraph(); - - // Create the root object - g.createRootObject(rootType); - - ChangeSummary summary = g.getChangeSummary(); - summary.beginLogging(); - - return g.getRootObject(); - } - - 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))) { - 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 = 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java deleted file mode 100644 index e3ae306485..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 final class ConfigUtil { - - private ConfigUtil() { - - } - - public static Config loadConfig(InputStream configStream) { - - if (configStream == null) { - throw new RuntimeException("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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java deleted file mode 100644 index b9649669e5..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 final class DataObjectUtil { - - private 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/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java deleted file mode 100644 index bcd4386415..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 necessary log4j API classes */ -import org.apache.log4j.Appender; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Layout; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.log4j.PatternLayout; - -/** - * Helper class for logging using external log utility : log4j - * This will use log4j and to configure it, please add/update log4j.properties - * - * @author lresende - */ - -public final class LoggerFactory { - public static final LoggerFactory INSTANCE = new LoggerFactory(); - - private static Layout defaultLayout; - - private static Appender defaultAppender; - - static { - synchronized (LoggerFactory.class) { - defaultLayout = new PatternLayout(LoggerLayout.layout()); - defaultAppender = new ConsoleAppender(defaultLayout); - } - } - - private LoggerFactory() { - - } - - public Logger getLogger(Class loggingClass) { - Logger logger = Logger.getLogger(loggingClass); - logger.setLevel(Level.OFF); - logger.addAppender(defaultAppender); - - return logger; - } - - public Logger getLogger(Class loggingClass, Level logLevel) { - Logger logger = Logger.getLogger(loggingClass); - logger.setLevel(logLevel); - logger.addAppender(defaultAppender); - - return logger; - } - - public static void main(String[] args) { - - Logger log = LoggerFactory.INSTANCE.getLogger(LoggerFactory.class); - if (log.isDebugEnabled()) { - log.debug("something"); - } - - } -} diff --git a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java b/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java deleted file mode 100644 index f34330be48..0000000000 --- a/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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; - -/** - * Log4J layout helper for Tuscany DAS - * @author lresende - */ -public final class LoggerLayout { - - private LoggerLayout() { - - } - - public static String layout() { - - /* - * Substitute symbols - * %c Logger, %c{2 } last 2 partial names - * %C Class name (full agony), %C{2 } last 2 partial names - * %d{dd MMM yyyy HH:MM:ss } Date, format see java.text.SimpleDateFormat - * %F File name - * %l Location (caution: compiler-option-dependently) - * %L Line number - * %m user-defined message - * %M Method name - * %p Level - * %r Milliseconds since program start - * %t Threadname - * %x, %X see Doku - * %% individual percentage sign - * - * Caution: %C, %F, %l, %L, %M slow down program run! - * Note, %n is newline - */ - - return "[DAS RDB] - %c{1}.%M (%L) : %m %n"; - } - -} diff --git a/branches/das-java-M2/rdb/src/main/resources/META-INF/LICENSE.txt b/branches/das-java-M2/rdb/src/main/resources/META-INF/LICENSE.txt deleted file mode 100644 index 25d78feeac..0000000000 --- a/branches/das-java-M2/rdb/src/main/resources/META-INF/LICENSE.txt +++ /dev/null @@ -1,1277 +0,0 @@ - - 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/branches/das-java-M2/rdb/src/main/resources/META-INF/MANIFEST.MF b/branches/das-java-M2/rdb/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index cfdce9ed00..0000000000 --- a/branches/das-java-M2/rdb/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -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/branches/das-java-M2/rdb/src/main/resources/META-INF/NOTICE b/branches/das-java-M2/rdb/src/main/resources/META-INF/NOTICE deleted file mode 100644 index d48810c0ec..0000000000 --- a/branches/das-java-M2/rdb/src/main/resources/META-INF/NOTICE +++ /dev/null @@ -1,18 +0,0 @@ -========================================================================= -== 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/branches/das-java-M2/rdb/src/main/resources/META-INF/README.txt b/branches/das-java-M2/rdb/src/main/resources/META-INF/README.txt deleted file mode 100644 index 9b26d1690a..0000000000 --- a/branches/das-java-M2/rdb/src/main/resources/META-INF/README.txt +++ /dev/null @@ -1,35 +0,0 @@ -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/branches/das-java-M2/rdb/src/main/resources/config.xsd b/branches/das-java-M2/rdb/src/main/resources/config.xsd deleted file mode 100644 index 41d440dadd..0000000000 --- a/branches/das-java-M2/rdb/src/main/resources/config.xsd +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl b/branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl deleted file mode 100644 index 476974975b..0000000000 --- a/branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl +++ /dev/null @@ -1,4622 +0,0 @@ - -(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 ClassAttribute "dataSource" - quid "4485DF600233" - type "String") - (object ClassAttribute "dataObjectModel" - quid "449AB6CD0132" - 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 "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 "tableName" - quid "4362A7B2031D" - type "String") - (object ClassAttribute "typeName" - 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 "columnName" - 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 "name" - quid "449AB74D03DF" - type "type" - initv "initval")) - 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 "4362A3D302FA" - roles (list role_list - (object Role "$UNNAMED$4" - quid "4362A3D40143" - supplier "Logical View::config::Command" - quidu "4362A2EC01FE" - is_navigable TRUE - is_aggregate TRUE) - (object Role "$UNNAMED$5" - quid "4362A3D40144" - supplier "Logical View::config::Parameter" - quidu "4362A3C902BA" - client_cardinality (value cardinality "0..n") - Containment "By Value" - is_navigable TRUE))) - (object Association "$UNNAMED$6" - quid "4362A448026C" - roles (list role_list - (object Role "$UNNAMED$7" - quid "4362A4490105" - supplier "Logical View::config::Config" - quidu "4362A2DE0045" - is_navigable TRUE - is_aggregate TRUE) - (object Role "$UNNAMED$8" - quid "4362A4490106" - supplier "Logical View::config::Table" - quidu "4362A43C0002" - client_cardinality (value cardinality "0..n") - Containment "By Value" - is_navigable TRUE))) - (object Association "$UNNAMED$9" - quid "4362A44B0298" - roles (list role_list - (object Role "$UNNAMED$10" - quid "4362A44C01AA" - supplier "Logical View::config::Config" - quidu "4362A2DE0045" - is_navigable TRUE - is_aggregate TRUE) - (object Role "$UNNAMED$11" - quid "4362A44C01AB" - supplier "Logical View::config::Relationship" - quidu "4362A42E03A5" - client_cardinality (value cardinality "0..n") - Containment "By Value" - is_navigable TRUE))) - (object Association "$UNNAMED$12" - quid "4362A76302A1" - roles (list role_list - (object Role "$UNNAMED$13" - quid "4362A7640090" - supplier "Logical View::config::Table" - quidu "4362A43C0002" - is_navigable TRUE - is_aggregate TRUE) - (object Role "$UNNAMED$14" - quid "4362A7640091" - supplier "Logical View::config::Column" - quidu "4362A75C016B" - client_cardinality (value cardinality "0..n") - Containment "By Value" - is_navigable TRUE))) - (object Association "$UNNAMED$15" - quid "4362A771032E" - roles (list role_list - (object Role "$UNNAMED$16" - quid "4362A7720108" - supplier "Logical View::config::Relationship" - quidu "4362A42E03A5" - is_navigable TRUE - is_aggregate TRUE) - (object Role "$UNNAMED$17" - quid "4362A7720109" - supplier "Logical View::config::KeyPair" - quidu "4362A72E0010" - client_cardinality (value cardinality "0..n") - Containment "By Value" - is_navigable TRUE))) - (object Association "$UNNAMED$18" - quid "437B59A10066" - roles (list role_list - (object Role "$UNNAMED$19" - quid "437B59A30145" - supplier "Logical View::config::Command" - quidu "4362A2EC01FE" - Containment "By Value" - is_navigable TRUE - is_aggregate TRUE) - (object Role "$UNNAMED$20" - 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" - compartment (object Compartment - Parent_View @1 - location (809, 1287) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 3 - max_width 496) - 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" - compartment (object Compartment - Parent_View @2 - location (1756, 1348) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 8 - max_width 525) - width 536 - height 486 - autoResize TRUE) - (object ClassView "Class" "Logical View::config::Relationship" @3 - ShowCompartmentStereotypes TRUE - IncludeAttribute TRUE - IncludeOperation TRUE - location (1054, 744) - label (object ItemLabel - Parent_View @3 - 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" - compartment (object Compartment - Parent_View @3 - location (829, 648) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 5 - max_width 456) - width 468 - height 336 - autoResize TRUE) - (object AssociationViewNew "$UNNAMED$15" @4 - location (1081, 1063) - stereotype TRUE - line_color 3342489 - quidu "4362A771032E" - roleview_list (list RoleViews - (object RoleView "$UNNAMED$16" @5 - Parent_View @4 - location (-97, -84) - stereotype TRUE - line_color 3342489 - quidu "4362A7720108" - client @4 - supplier @3 - line_style 3 - origin_attachment (1080, 1063) - terminal_attachment (1080, 912)) - (object RoleView "$UNNAMED$17" @6 - Parent_View @4 - location (-97, -84) - stereotype TRUE - line_color 3342489 - quidu "4362A7720109" - client @4 - supplier @1 - line_style 3 - origin_attachment (1080, 1063) - terminal_attachment (1080, 1215) - label (object SegLabel @7 - Parent_View @6 - 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" @8 - ShowCompartmentStereotypes TRUE - IncludeAttribute TRUE - IncludeOperation TRUE - location (1984, 837) - label (object ItemLabel - Parent_View @8 - location (1814, 656) - fill_color 13434879 - nlines 1 - max_width 340 - justify 0 - label "Table") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "4362A43C0002" - compartment (object Compartment - Parent_View @8 - location (1814, 716) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 6 - max_width 346) - width 358 - height 386 - autoResize TRUE) - (object AssociationViewNew "$UNNAMED$12" @9 - location (1807, 1153) - stereotype TRUE - line_color 3342489 - quidu "4362A76302A1" - roleview_list (list RoleViews - (object RoleView "$UNNAMED$13" @10 - Parent_View @9 - location (1032, 6) - stereotype TRUE - line_color 3342489 - quidu "4362A7640090" - client @9 - supplier @8 - line_style 3 - origin_attachment (1807, 1153) - terminal_attachment (1807, 1030)) - (object RoleView "$UNNAMED$14" @11 - Parent_View @9 - location (1032, 6) - stereotype TRUE - line_color 3342489 - quidu "4362A7640091" - client @9 - supplier @2 - line_style 3 - origin_attachment (1807, 1153) - terminal_attachment (1807, 1276) - label (object SegLabel @12 - Parent_View @11 - location (1861, 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" @13 - ShowCompartmentStereotypes TRUE - IncludeAttribute TRUE - IncludeOperation TRUE - location (186, 806) - label (object ItemLabel - Parent_View @13 - 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" - compartment (object Compartment - Parent_View @13 - location (4, 760) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 3 - max_width 371) - width 382 - height 236 - autoResize TRUE) - (object ClassView "Class" "Logical View::config::Config" @14 - ShowCompartmentStereotypes TRUE - IncludeAttribute TRUE - IncludeOperation TRUE - location (1054, 186) - label (object ItemLabel - Parent_View @14 - location (828, 55) - fill_color 13434879 - nlines 1 - max_width 452 - justify 0 - label "Config") - icon_style "Icon" - line_color 3342489 - fill_color 13434879 - quidu "4362A2DE0045" - compartment (object Compartment - Parent_View @14 - location (828, 115) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 4 - max_width 450) - width 470 - height 286 - autoResize TRUE) - (object AssociationViewNew "$UNNAMED$9" @15 - location (1054, 452) - label (object SegLabel @16 - Parent_View @15 - location (1054, 393) - 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$10" @17 - Parent_View @15 - location (-93, -354) - label (object SegLabel @18 - Parent_View @17 - location (1013, 354) - 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 @15 - supplier @14 - line_style 0) - (object RoleView "$UNNAMED$11" @19 - Parent_View @15 - location (-93, -354) - label (object SegLabel @20 - Parent_View @19 - location (1013, 526) - 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 @15 - supplier @3 - line_style 0 - label (object SegLabel @21 - Parent_View @19 - location (1011, 562) - anchor 2 - anchor_loc 1 - nlines 1 - max_width 15 - justify 0 - label "0..*" - pctDist 0.899471 - height 44 - orientation 1)))) - (object AssociationViewNew "$UNNAMED$6" @22 - location (1829, 247) - stereotype TRUE - line_color 3342489 - quidu "4362A448026C" - roleview_list (list RoleViews - (object RoleView "$UNNAMED$7" @23 - Parent_View @22 - location (1023, -559) - stereotype TRUE - line_color 3342489 - quidu "4362A4490105" - client @22 - supplier @14 - line_style 3 - origin_attachment (1829, 247) - terminal_attachment (1289, 247)) - (object RoleView "$UNNAMED$8" @24 - Parent_View @22 - location (1023, -559) - stereotype TRUE - line_color 3342489 - quidu "4362A4490106" - client @22 - supplier @8 - vertices (list Points - (1829, 247) - (1972, 247) - (1972, 644)) - line_style 3 - origin_attachment (1829, 247) - terminal_attachment (1972, 644) - label (object SegLabel @25 - Parent_View @24 - location (2031, 441) - 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" @26 - ShowCompartmentStereotypes TRUE - IncludeAttribute TRUE - IncludeOperation TRUE - location (186, 217) - label (object ItemLabel - Parent_View @26 - 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" - compartment (object Compartment - Parent_View @26 - location (63, 146) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 4 - max_width 253) - width 264 - height 286 - autoResize TRUE) - (object AssociationViewNew "$UNNAMED$3" @27 - location (186, 523) - stereotype TRUE - line_color 3342489 - quidu "4362A3D302FA" - roleview_list (list RoleViews - (object RoleView "$UNNAMED$4" @28 - Parent_View @27 - location (-279, -500) - stereotype TRUE - line_color 3342489 - quidu "4362A3D40143" - client @27 - supplier @26 - line_style 0) - (object RoleView "$UNNAMED$5" @29 - Parent_View @27 - location (-279, -500) - stereotype TRUE - line_color 3342489 - quidu "4362A3D40144" - client @27 - supplier @13 - line_style 0 - label (object SegLabel @30 - Parent_View @29 - 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" @31 - location (568, 213) - stereotype TRUE - line_color 3342489 - quidu "4362A3030323" - roleview_list (list RoleViews - (object RoleView "$UNNAMED$1" @32 - Parent_View @31 - location (134, -469) - stereotype TRUE - line_color 3342489 - quidu "4362A3040108" - client @31 - supplier @14 - line_style 3 - origin_attachment (568, 213) - terminal_attachment (819, 213)) - (object RoleView "$UNNAMED$2" @33 - Parent_View @31 - location (134, -469) - stereotype TRUE - line_color 3342489 - quidu "4362A3040109" - client @31 - supplier @26 - line_style 3 - origin_attachment (568, 213) - terminal_attachment (318, 213) - label (object SegLabel @34 - Parent_View @33 - location (360, 261) - 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" @35 - ShowCompartmentStereotypes TRUE - IncludeAttribute TRUE - IncludeOperation TRUE - location (465, 1240) - label (object ItemLabel - Parent_View @35 - 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" - compartment (object Compartment - Parent_View @35 - location (248, 1144) - icon_style "Icon" - fill_color 16777215 - anchor 2 - nlines 5 - max_width 431) - width 452 - height 336 - annotation 8 - autoResize TRUE) - (object AssociationViewNew "$UNNAMED$18" @36 - location (484, 626) - stereotype TRUE - line_color 3342489 - quidu "437B59A10066" - roleview_list (list RoleViews - (object RoleView "$UNNAMED$19" @37 - Parent_View @36 - location (50, -614) - stereotype TRUE - line_color 3342489 - quidu "437B59A30145" - client @36 - supplier @26 - vertices (list Points - (484, 626) - (484, 347) - (318, 347)) - line_style 3 - origin_attachment (484, 626) - terminal_attachment (318, 347)) - (object RoleView "$UNNAMED$20" @38 - Parent_View @36 - location (50, -614) - stereotype TRUE - line_color 3342489 - quidu "437B59A30146" - client @36 - supplier @35 - line_style 3 - origin_attachment (484, 626) - terminal_attachment (484, 1072) - label (object SegLabel @39 - Parent_View @38 - 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" @40 - location (682, 589) - label (object ItemLabel - Parent_View @40 - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java deleted file mode 100644 index b9226e3e01..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -import org.apache.tuscany.das.rdb.test.data.BookData; -import org.apache.tuscany.das.rdb.test.framework.DasTest; - -import commonj.sdo.DataObject; - -public class AliasTests extends DasTest { - - protected void setUp() throws Exception { - - super.setUp(); - new BookData(getAutoConnection()).refresh(); - } - - /** - * Tests the use of column aliasing. The property name change is found in the - * BooksConfig.xml file Otherwise similar to testTableAlias - * - * @throws Exception - */ - public void testColumnAlias() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection()); - - Command select = das.getCommand("get all books"); - // select.setConnection( getConnection() ); - - DataObject root = select.executeQuery(); - - DataObject book = root.getDataObject("Book[2]"); - book.set("Writer", "Dr. Seuss"); - - das.applyChanges(root); - - select = das.getCommand("get Cat in the Hat"); - - root = select.executeQuery(); - // Ensure the change actually updated - assertEquals("Dr. Seuss", root.getString("Book[1]/Writer")); - } - - /** - * Tests to ensure that columns are being properly read when using an Alias, - * just a bunch of simple creating, renaming, and deleting of entries - * while using an alias. - */ - public void testColumnData() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection()); - - Command select = das.getCommand("get book by ID"); - select.setParameter(1, Integer.valueOf(1)); - - // *******Verifys a column entry is readable - DataObject root = select.executeQuery(); - assertEquals("Fyodor Dostoevsky", root.getString("Book[1]/Writer")); - - DataObject bookToChange = root.getDataObject("Book[1]"); - bookToChange.set("Writer", "Fyodor Dostoevskii"); // His last name COULD be spelt like that too! - - das.applyChanges(root); - - // *******Verifys correct information in entry after a column data is changed - select = das.getCommand("get all books"); - // select.setConnection(getConnection()); - - root = select.executeQuery(); - bookToChange = null; - Iterator i = root.getList("Book").iterator(); - while (i.hasNext()) { - DataObject d = (DataObject) i.next(); - if ("Fyodor Dostoevskii".equals(d.getString("Writer"))) { - bookToChange = d; - } - } - assertFalse(bookToChange == null); - - bookToChange.delete(); - - das.applyChanges(root); - - // *******Verifys correct in table, after entry is deleted - select = das.getCommand("get all books"); - // select.setConnection(getConnection()); - - root = select.executeQuery(); - assertEquals(1, root.getList("Book").size()); - assertEquals("Doctor Seuss", root.getString("Book[1]/Writer")); - } - - /** - * Test to check if updating a table works when using Aliasing Previously this was test_4 in ExceptionTests. - */ - public void testTableAlias() throws Exception { - - // Create Table config programmatically - // ConfigHelper helper = new ConfigHelper(); - // helper.addTable("BOOK", "Book"); - // helper.addPrimaryKey("BOOK.BOOK_ID"); - - DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection()); - Command select = das.getCommand("get book by ID"); - select.setParameter(1, Integer.valueOf(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); - - das.applyChanges(root); - - root = select.executeQuery(); - - // Verify - select.setParameter(1, Integer.valueOf(1001)); - root = select.executeQuery(); - - assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME")); - } - - /** - * Test ability to assign DataObject type and propertyaliases with xml file - */ - public void testRead() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("customerMapping.xml"), getConnection()); - // Read a customer - Command select = das.createCommand("SELECT * FROM CUSTOMER WHERE CUSTOMER.ID = 1"); - - 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")); - - } -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java deleted file mode 100644 index bb53cb65e5..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; - -import org.apache.tuscany.das.rdb.Command; -import org.apache.tuscany.das.rdb.DAS; -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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - Command read = das.getCommand("all companies"); - DataObject root = read.executeQuery(); - assertEquals(3, root.getList("COMPANY").size()); - - } - - //Read list of companies - public void testReadCompaniesWithDepartments() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - Command read = das.getCommand("all companies and departments"); - DataObject root = read.executeQuery(); - - Iterator i = root.getList("COMPANY").iterator(); - while (i.hasNext()) { - DataObject d = (DataObject) i.next(); - List departments = d.getList("departments"); - if (d.getString("NAME").equals("Do-rite plumbing") || d.getString("NAME").equals("ACME Publishing")) { - assertEquals(0, departments.size()); - } else { - assertEquals(1, departments.size()); - } - } - - } - - public void testddDepartmentToFirstCompany() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - Command read = das.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); - - das.applyChanges(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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - Command select = das.getCommand("all companies and departments"); - 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("DEPNUMBER", "101"); - - // Associate the new department with the new company - company.getList("departments").add(department); - - // Get apply command - das.applyChanges(root); - - // Save the id - Integer id = (Integer) company.get("ID"); - - // Verify the change - - select = das.getCommand("company by id with departments"); - select.setParameter(1, 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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - - Command select = das.getCommand("company by id with departments"); - Integer idOfNoExistingCompany = Integer.valueOf(-1); - select.setParameter(1, idOfNoExistingCompany); - DataObject root = select.executeQuery(); - - //Will fail if there is no property named "COMPANY" - assertEquals(0, root.getList("COMPANY").size()); - - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java deleted file mode 100644 index ee42438cb1..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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 { - DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithInvalidCUD.xml"), getConnection()); - - // Read customer with particular ID - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - // Modify customer - customer.set("LASTNAME", "Pavick"); - - // Flush changes - try { - das.applyChanges(root); - fail("Should fail with invalid SQL. Provided CUD not used!!"); - } catch (RuntimeException e) { - // Everything OK - } - - } - - public void testInsertCUDGeneration() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = root.createDataObject("CUSTOMER"); - customer.setInt("ID", 720); - customer.set("LASTNAME", "foobar"); - customer.set("ADDRESS", "asdfasdf"); - - das.applyChanges(root); - - select = das.createCommand("select * from CUSTOMER where ID = 720"); - root = select.executeQuery(); - - assertEquals(1, root.getList("CUSTOMER").size()); - } - - public void testReadModifyApply() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("1xM_mapping_no_cud.xml"), getConnection()); - - // Build the select command to read a specific customer and related - // orders - Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " - + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); - - // Parameterize the command - select.setParameter(1, Integer.valueOf(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"); - - das.applyChanges(root); - - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java deleted file mode 100644 index 076f8d9db7..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.config.Config; -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.das.rdb.util.ConfigUtil; - -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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - - Command read = das.getCommand("all customers"); - DataObject root = read.executeQuery(); - - assertEquals(5, root.getList("CUSTOMER").size()); - - } - - /** - * Read - */ - public void testReadUsingConfigInput() throws Exception { - Config config = ConfigUtil.loadConfig(getConfig("CustomersOrdersConfig.xml")); - DAS das = DAS.FACTORY.createDAS(config, getConnection()); - - Command read = das.getCommand("all customers"); - DataObject root = read.executeQuery(); - - assertEquals(5, root.getList("CUSTOMER").size()); - - } - - /** - * Read an order using parm marker - */ - public void testReadWithParmmarker() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - - Command read = das.getCommand("order by id"); - read.setParameter(1, Integer.valueOf(1)); - DataObject root = read.executeQuery(); - - assertEquals("recombobulator", root.getString("ANORDER[1]/PRODUCT")); - - } - - /** - * Specify connection properties in config. Add explicit update command - */ - public void testUpdate() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - - Command read = das.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 = das.getCommand("update customer"); - update.setParameter(1, Integer.valueOf(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 - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - - // Read all customers and remember the first one - Command read = das.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 = das.getCommand("customer and orders"); - custOrders.setParameter(1, 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"); - das.applyChanges(root); - - // Verify - Command orderByID = das.getCommand("order by id"); - orderByID.setParameter(1, orderId); - assertEquals("Defibrillator", root.getString("ANORDER[1]/PRODUCT")); - - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java deleted file mode 100644 index 677b0d9d85..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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.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; - -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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("companyMapping.xml"), getConnection()); - - // Build the select command - Command selectCommand = das.createCommand("select COMPANY.NAME, " - + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, " - + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.DEPNUMBER from COMPANY, DEPARTMENT, EMPLOYEE " - + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID"); - - // 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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("companyMappingWithConverters.xml"), getConnection()); - SDOUtil.registerStaticTypes(CompanyFactory.class); - // Build the select command - Command selectCommand = das.createCommand("select COMPANY.NAME, " - + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, " - + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.DEPNUMBER from COMPANY, DEPARTMENT, EMPLOYEE " - + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID"); - - // Get the graph - DataObject root = selectCommand.executeQuery(); - - CompanyType company = (CompanyType) root.getList("CompanyType").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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java deleted file mode 100644 index a24ad6319e..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?"); - - getOrderDetails.setParameter(1, Integer.valueOf(1)); - getOrderDetails.setParameter(2, Integer.valueOf(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 { - DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection()); - Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = 1 AND PRODUCTID = 1"); - - 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 - - das.applyChanges(root); - - // Verify - root = getOrderDetails.executeQuery(); - orderDetails = root.getDataObject("ORDERDETAILS[1]"); - assertEquals(0f, orderDetails.getFloat("PRICE"), 0.01); - - } - - public void testReadOrdersAndDetails2() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection()); - Command read = das.createCommand("SELECT * FROM ANORDER LEFT JOIN ORDERDETAILS " - + "ON ANORDER.ID = ORDERDETAILS.ORDERID ORDER BY ANORDER.ID"); - - DataObject root = read.executeQuery(); - - DataObject firstOrder = root.getDataObject("ANORDER[1]"); - assertEquals(1, firstOrder.getInt("ID")); - assertEquals(2, firstOrder.getList("ORDERDETAILS").size()); - - } - - public void testReadAndDelete() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection()); - Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?"); - - getOrderDetails.setParameter(1, Integer.valueOf(1)); - getOrderDetails.setParameter(2, Integer.valueOf(1)); - - DataObject root = getOrderDetails.executeQuery(); - - DataObject orderDetail = (DataObject) root.get("ORDERDETAILS[1]"); - orderDetail.delete(); - das.applyChanges(root); - - } -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java deleted file mode 100644 index e8a4593602..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.DAS; -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.data.CustomerData; -import org.apache.tuscany.das.rdb.test.framework.DasTest; -import org.apache.tuscany.sdo.util.SDOUtil; - -import commonj.sdo.DataObject; - -/** - * Tests the Converter framwork - */ -public class ConverterTests extends DasTest { - - private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd"); - - private static Date kbday; - - private static Date tbday; - - protected void setUp() throws Exception { - super.setUp(); - new CustomerData(getAutoConnection()).refresh(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - 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 { - DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfigWithConverter.xml"), getConnection()); - - // Create and initialize command to read customers - Command read = das.getCommand("testArbitraryConverter"); - - // Read - DataObject root = read.executeQuery(); - - // Verify - assertEquals(kbday, root.getDate("CUSTOMER[1]/LASTNAME")); - - // Modify - root.setDate("CUSTOMER[1]/LASTNAME", tbday); - - das.applyChanges(root); - - // Read - root = read.executeQuery(); - - // Verify - assertEquals(tbday, root.getDate("CUSTOMER[1]/LASTNAME")); - - } - - public void testInvalidConverter1() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection()); - - // Build the select command to read a specific customer and related - // orders - Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " - + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); - - // Parameterize the command - select.setParameter(1, Integer.valueOf(1)); - - // Get the graph - try { - select.executeQuery(); - } catch (Exception ex) { - assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage()); - } - - } - - public void testInvalidConverter2() throws Exception { - - SDOUtil.registerStaticTypes(CustomerFactory.class); - DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection()); - - // Build the select command to read a specific customer and related - // orders - Command select = das.createCommand("SELECT * FROM ANORDER"); - - // Get the graph - - DataObject root = select.executeQuery(); - DataObject order = root.getDataObject("AnOrder[1]"); - - Customer customer = (Customer) root.createDataObject("Customer"); - customer.setID(700); - customer.setLastName("Daniel"); - customer.setAddress("an address"); - - customer.getOrders().add(order); - - try { - das.applyChanges(root); - } catch (Exception ex) { - assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage()); - } - - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java deleted file mode 100644 index ff2af5256c..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.ConfigHelper; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.config.Table; -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 { - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - // Read some customers and related orders - Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " - + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); - - 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", Integer.valueOf(99)); - order.set("PRODUCT", "The 99th product"); - order.set("QUANTITY", Integer.valueOf(99)); - cust.getList("orders").add(order); - - assertEquals(custOrderCount + 1, cust.getList("orders").size()); - - // Build apply changes command - das.applyChanges(root); - - // verify cust1 relationship updates - select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " - + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); - - select.setParameter(1, Integer.valueOf(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 (?, ?)"; - - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand(sql); - insert.setParameter(1, Integer.valueOf(316405209)); - insert.setParameter(2, "2005-11-23 19:29:52.636"); - insert.execute(); - - // Verify - Command select = das.createCommand("Select * from conmgt.SERVERSTATUS"); - DataObject root = select.executeQuery(); - assertEquals(1, root.getList("SERVERSTATUS").size()); - - } - - public void testWASDefect330118() throws Exception { - - // Create the group and set common connection - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - - // Read all customers and add one - Command read = das.getCommand("all customers"); - DataObject root = read.executeQuery(); - int numCustomers = root.getList("CUSTOMER").size(); - - DataObject newCust = root.createDataObject("CUSTOMER"); - newCust.set("ID", Integer.valueOf(100)); - newCust.set("ADDRESS", "5528 Wells Fargo Drive"); - newCust.set("LASTNAME", "Gerkin"); - - // Now delete this new customer - newCust.delete(); - - das.applyChanges(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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); - insert.setParameter(1, Integer.valueOf(10)); - insert.setParameter(2, null); - insert.setParameter(3, "5528 Wells Fargo Dr"); - insert.execute(); - - // Verify - Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); - 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); - insert.setParameter(1, Integer.valueOf(10)); - // insert.setParameterValue("LASTNAME", null); - insert.setParameter(3, "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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); - insert.setParameter(1, Integer.valueOf(10)); - insert.setParameter(2, ""); - insert.setParameter(3, "5528 Wells Fargo Dr"); - insert.execute(); - - // Verify - Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); - 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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - - // Read a specific company based on the known ID - Command readCust = das.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; - } - - das.applyChanges(root); - } - - /** - * 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); - insert.setParameter(1, Integer.valueOf(10)); - insert.setParameter(2, "Williams"); - insert.setParameter(3, null); - insert.execute(); - - // Verify - Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); - DataObject root = select.executeQuery(); - assertEquals(1, root.getList("CUSTOMER").size()); - assertNull(root.get("CUSTOMER[1]/ADDRESS")); - - } - - /** - * Formely tests concerning Tuscany-433. The error causing these tests was cleared up when - * the method for handling parameters was changed. - */ - public void testReadModifyApply() throws Exception { - - // Provide updatecommand programmatically via config - ConfigHelper helper = new ConfigHelper(); - Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER"); - helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME = ? where ID = ?", "LASTNAME ID"); - - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - - //Read customer 1 - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - //Modify customer - customer.set("LASTNAME", "Pavick"); - - das.applyChanges(root); - - //Verify changes - root = select.executeQuery(); - assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); - - } - - public void testReadModifyApply1() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD2.xml"), getConnection()); - //Read customer 1 - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - //Modify customer - customer.set("LASTNAME", "Pavick"); - - //Build apply changes command - das.applyChanges(root); - - //Verify changes - root = select.executeQuery(); - assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); - - } - -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java deleted file mode 100644 index a888fbd818..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.ConfigHelper; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.config.Table; -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(); - } - - public void testDeleteAndCreate() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD2.xml"), getConnection()); - // Read customer 1 - Command select = das.createCommand("Select * from CUSTOMER"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - int customerId = customer.getInt("ID"); - // Modify customer - customer.delete(); - - DataObject newCustomer = root.createDataObject("CUSTOMER"); - newCustomer.setInt("ID", 9999); - newCustomer.setString("LASTNAME", "Jones"); - - // Build apply changes command - das.applyChanges(root); - - // Verify changes - root = select.executeQuery(); - boolean found = false; - Iterator i = root.getList("CUSTOMER").iterator(); - while (i.hasNext()) { - customer = (DataObject) i.next(); - assertFalse(customerId == customer.getInt("ID")); - if (customer.getInt("ID") == 9999) { - found = true; - } - } - - assertTrue(found); - - } - - /** - * Read and modify a customer. Provide needed Create/Update/Delete statements programatically - */ - public void testReadModifyApply() throws Exception { - - // Provide updatecommand programmatically via config - ConfigHelper helper = new ConfigHelper(); - Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER"); - helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME = ?, ADDRESS = ? " - + "where ID = ?", "LASTNAME ADDRESS ID"); - - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - // Read customer 1 - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - // Modify customer - customer.set("LASTNAME", "Pavick"); - - // Build apply changes command - das.applyChanges(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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD.xml"), getConnection()); - // Read customer 1 - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - // Modify customer - customer.set("LASTNAME", "Pavick"); - - // Build apply changes command - das.applyChanges(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 { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Read customer with particular ID - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = root.getDataObject("CUSTOMER[1]"); - - // Modify customer - customer.set("LASTNAME", "Pavick"); - - // Build apply changes command - das.applyChanges(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 { - DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection()); - // Read customer with particular ID - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - // Modify customer - customer.set("LASTNAME", "Pavick"); - - // Build apply changes command - das.applyChanges(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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection()); - // Read some customers - Command select = das.createCommand("Select * from CUSTOMER where LASTNAME = 'Williams'"); - 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", Integer.valueOf(100)); - cust4.set("ADDRESS", "5528 Wells Fargo Drive"); - cust4.set("LASTNAME", "Gerkin"); - - // Build apply changes command - das.applyChanges(root); - - // Verify deletes - select = das.createCommand("Select * from CUSTOMER where ID = ?"); - select.setParameter(1, Integer.valueOf(cust2ID)); - root = select.executeQuery(); - assertTrue(root.getList("CUSTOMER").isEmpty()); - // reparameterize same command - select.setParameter(1, Integer.valueOf(cust3ID)); - root = select.executeQuery(); - assertTrue(root.getList("CUSTOMER").isEmpty()); - - // verify insert - select.setParameter(1, Integer.valueOf(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.setParameter(1, Integer.valueOf(cust1ID)); - root = select.executeQuery(); - assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); - - } - - public void testReadModifyApplyWithAssumedID() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Read customer with particular ID - Command select = das.createCommand("Select * from CUSTOMER"); - DataObject root = select.executeQuery(); - - DataObject customer = root.getDataObject("CUSTOMER[1]"); - - // Modify customer - customer.set("LASTNAME", "Pavick"); - - DataObject customerForDelete = getCustomerByLastName(root, "Daniel"); - customerForDelete.delete(); - - DataObject newCustomer = root.createDataObject("CUSTOMER"); - newCustomer.set("LASTNAME", "NewCustomer"); - newCustomer.setInt("ID", 9000); - - // Build apply changes command - das.applyChanges(root); - - // Verify the change - root = select.executeQuery(); - assertEquals("Pavick", getCustomerByLastName(root, "Pavick").getString("LASTNAME")); - assertEquals("NewCustomer", getCustomerByLastName(root, "NewCustomer").getString("LASTNAME")); - assertNull(getCustomerByLastName(root, "Daniel")); - - } - - public void testReadModifyApplyWithAssumedIDFailure() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command select = das.createCommand("Select * from ORDERDETAILS"); - - DataObject root = select.executeQuery(); - - DataObject od = root.getDataObject("ORDERDETAILS[1]"); - - // Modify customer - od.setInt("PRODUCTID", 72); - - // Flush changes -- This should fail because Order Details does not have - // a column that - // we can assume to be an ID - try { - das.applyChanges(root); - } catch (RuntimeException ex) { - assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config")); - } - - } - - public void testReadModifyApplyWithAssumedIDFailure2() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command select = das.createCommand("Select * from ORDERDETAILS"); - DataObject root = select.executeQuery(); - - DataObject od = root.getDataObject("ORDERDETAILS[1]"); - od.delete(); - - // Flush changes -- This should fail because Order Details does not have - // a column that - // we can assume to be an ID - try { - das.applyChanges(root); - } catch (RuntimeException ex) { - assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config")); - } - - } - - public void testReadModifyApplyWithAssumedIDFailure3() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command select = das.createCommand("Select * from ORDERDETAILS"); - DataObject root = select.executeQuery(); - - DataObject od = root.createDataObject("ORDERDETAILS"); - - // Modify customer - od.setInt("PRODUCTID", 72); - od.setInt("ORDERID", 500); - - // Flush changes -- This should fail because Order Details does not have - // a column that - // we can assume to be an ID - try { - das.applyChanges(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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java deleted file mode 100644 index 4c5f128db5..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.DAS; -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')"; - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand(sql); - insert.execute(); - - // Verify - Command select = das.createCommand("Select * from conmgt.serverstatus where statusid = 316405209"); - DataObject root = select.executeQuery(); - assertEquals(1, root.getList("conmgt.serverstatus").size()); - - } - - public void testUpdateChildThatHasGeneratedKey() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml")); - - //Read a specific company based on the known ID - Command readCust = das.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; - } - - das.applyChanges(root); - - } - -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java deleted file mode 100644 index e66095cdd7..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Connection; -import java.sql.SQLException; - -import org.apache.tuscany.das.rdb.Command; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.test.company.CompanyFactory; -import org.apache.tuscany.das.rdb.test.customer.CustomerFactory; -import org.apache.tuscany.das.rdb.test.data.BookData; -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.data.OrderDetailsData; -import org.apache.tuscany.das.rdb.test.framework.DasTest; -import org.apache.tuscany.sdo.util.SDOUtil; - -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(); - new OrderDetailsData(getAutoConnection()).refresh(); - new CompanyData(getAutoConnection()).refresh(); - - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testMissingConnection() throws Exception { - DAS das = DAS.FACTORY.createDAS((Connection) null); - - try { - Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); - readCustomers.executeQuery(); - fail("RuntimeException should be thrown"); - } catch (RuntimeException ex) { - assertEquals("No connection has been provided and no data source has been specified", ex.getMessage()); - } - - } - - public void testUnregisteredTypes() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("staticInvalid.xml"), getConnection()); - Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); - - try { - readCustomers.executeQuery(); - - fail("Exception should be thrown"); - } catch (RuntimeException ex) { - assertEquals("SDO Types have not been registered for URI invalidURI", ex.getMessage()); - } - } - - public void testMissingMapping() throws Exception { - SDOUtil.registerStaticTypes(CustomerFactory.class); - DAS das = DAS.FACTORY.createDAS(getConfig("staticCustomer.xml"), getConnection()); - Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); - - 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 { - DAS.FACTORY.createDAS(getConfig("NonExistingFile.xml")); - fail("Error should be thrown"); - } catch (RuntimeException 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 { - DAS.FACTORY.createDAS(getConfig("NonExistingFile.xml")); - fail("Error should be thrown"); - } catch (RuntimeException e) { - assertEquals("Cannot load configuration from a null InputStream. Possibly caused " - + "by an incorrect config xml file name", e.getMessage()); - } - } - - public void testReadOrdersAndDetails2() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConfig1.xml"), getConnection()); - Command read = das.createCommand("SELECT * FROM ANORDER LEFT JOIN ORDERDETAILS " - + "ON ANORDER.ID = ORDERDETAILS.ORDERID ORDER BY ANORDER.ID"); - - try { - read.executeQuery(); - } catch (Exception ex) { - assertEquals("The parent table (xxx) in relationship ORDERDETAILS was not found.", ex.getMessage()); - } - - } - - public void testMismatchedDataObjectModel() throws SQLException { - SDOUtil.registerStaticTypes(CompanyFactory.class); - DAS das = DAS.FACTORY.createDAS(getConfig("companyMappingWithConverters.xml"), getConnection()); - Command read = das.createCommand("select * from company"); - try { - read.executeQuery(); - } catch (RuntimeException ex) { - assertEquals("Type CompanyType does not contain a property named ID", ex.getMessage()); - } - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java deleted file mode 100644 index 45c83e6167..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.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.setParameter(1, "Williams"); - - DataObject root = cmd.executeQuery(); - assertEquals(4, root.getList("CUSTOMER").size()); - - } - - public void testReadCustomersStaticTypes() throws Exception { - ReadCustomersStaticTypesCommand cmd = new ReadCustomersStaticTypesCommand(); - cmd.setConnection(getConnection()); - cmd.setParameter(1, "Williams"); - - DataObject root = cmd.executeQuery(); - - List customers = root.getList("Customer"); - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java deleted file mode 100644 index f339ea2634..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.Iterator; - -import org.apache.tuscany.das.rdb.Command; -import org.apache.tuscany.das.rdb.DAS; -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 { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into COMPANY (NAME) values (?)"); - insert.setParameter(1, "AAA Rental"); - insert.execute(); - - // Verify insert - // Verify - Command select = das.createCommand("Select ID, NAME from COMPANY"); - 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 { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into COMPANY (NAME) values (?)"); - insert.setParameter(1, "AAA Rental"); - insert.execute(); - - // insert another using same command - insert.setParameter(1, "BBB Rental"); - insert.execute(); - - // Verify insert - // Verify - Command select = das.createCommand("Select ID, NAME from COMPANY"); - DataObject root = select.executeQuery(); - - assertEquals(5, root.getList("COMPANY").size()); - - } - - // Test ability to retrieve and utilize the generated key - public void testInsert3() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into COMPANY (NAME) values (?)"); - insert.setParameter(1, "AAA Rental"); - insert.execute(); - // Integer key = (Integer) insert.getParameterValue("generated_key"); - Integer key = (Integer) insert.getGeneratedKey(); - - // Verify insert - Command select = das.createCommand("Select ID, NAME from COMPANY where ID = ?"); - select.setParameter(1, key); - DataObject root = select.executeQuery(); - assertEquals(key, root.get("COMPANY[1]/ID")); - - } - - // Test insert into row with generated ID and generated insert - public void testInsert4() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - Command select = das.getCommand("all companies"); - DataObject root = select.executeQuery(); - - DataObject company = root.createDataObject("COMPANY"); - company.setString("NAME", "Phil's Tires"); - // This shouldn't do anything - company.setInt("ID", 999); - - das.applyChanges(root); - - // Verify insert - root = select.executeQuery(); - - assertEquals(4, root.getList("COMPANY").size()); - Iterator i = root.getList("COMPANY").iterator(); - while (i.hasNext()) { - DataObject comp = (DataObject) i.next(); - assertFalse(comp.getInt("ID") == 999); - } - - } - - // Test ability to propogate generated values back to owning data objects - public void testPropagateIds() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); - Command select = das.getCommand("all companies"); - DataObject root = select.executeQuery(); - - // Create a new Company - DataObject company = root.createDataObject("COMPANY"); - company.setString("NAME", "Do-rite Pest Control"); - - // verify pre-condition (id is not there until after flush) - assertNull(company.get("ID")); - - // Flush changes - das.applyChanges(root); - - // Save the id - Integer id = (Integer) company.get("ID"); - - // Verify the change - select = das.createCommand("Select * from COMPANY where ID = ?"); - select.setParameter(1, 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 { - DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyMapping.xml"), getConnection()); - Command select = das.createCommand("Select * from COMPANY"); - DataObject root = select.executeQuery(); - - // Create a new Company - DataObject company = root.createDataObject("COMPANY"); - company.setString("NAME", "Do-rite Pest Control"); - - // verify pre-condition (id is not there until after flush) - assertNull(company.get("ID")); - - // Flush changes - das.applyChanges(root); - - // Save the id - Integer id = (Integer) company.get("ID"); - - // Verify the change - select = das.createCommand("Select * from COMPANY where ID = ?"); - select.setParameter(1, 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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyDepartmentMapping.xml"), getConnection()); - String selectCompanys = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID"; - - Command select = das.createCommand(selectCompanys); - 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("DEPNUMBER", "101"); - - // Associate the new department with the new company - company.getList("departments").add(department); - - das.applyChanges(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 = ?"; - - select = das.createCommand(selectString); - select.setParameter(1, 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"; - - DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyDepartmentMapping.xml"), getConnection()); - Command select = das.createCommand(selectCompanys); - 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("DEPNUMBER", "101"); - - // Associate the new department with the new company - company.getList("departments").add(department); - - das.applyChanges(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 = ?"; - - select = das.createCommand(selectString); - select.setParameter(1, 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command select = das.createCommand("Select * from COMPANY"); - select.executeQuery(); - - try { - select.getGeneratedKey(); - fail("Should throw exception"); - } catch (RuntimeException e) { - assertEquals("This method is only valid for insert commands", e.getMessage()); - } - } - -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java deleted file mode 100644 index 23b530dc34..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.List; - -import org.apache.tuscany.das.rdb.Command; -import org.apache.tuscany.das.rdb.ConfigHelper; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.merge.impl.GraphMerger; -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.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; - -public class GraphMergeTests extends DasTest { - - protected void setUp() throws Exception { - super.setUp(); - - new CustomerData(getAutoConnection()).refresh(); - new OrderData(getAutoConnection()).refresh(); - - } - - public void testCreateEmptyGraph() throws Exception { - String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd"; - SDOUtil.registerStaticTypes(CustomerFactory.class); - ConfigHelper helper = new ConfigHelper(); - helper.setDataObjectModel(typeUri); - DataObject graph = new GraphMerger().emptyGraph(helper.getConfig()); - assertEquals(0, graph.getList("Customer").size()); - assertEquals(0, graph.getList("AnOrder").size()); - - } - - public void testCreateEmptyGraphAndAddCustomer() throws Exception { - String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd"; - SDOUtil.registerStaticTypes(CustomerFactory.class); - ConfigHelper helper = new ConfigHelper(); - helper.setDataObjectModel(typeUri); - helper.addTable("CUSTOMER", "Customer"); - helper.addPrimaryKey("CUSTOMER.ID"); - - DataObject graph = new GraphMerger().emptyGraph(helper.getConfig()); - Customer c = (Customer) graph.createDataObject("Customer"); - c.setID(4000); - c.setLastName("Smith"); - c.setAddress("400 Fourth Street"); - - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - das.applyChanges(graph); - - Command cmd = das.createCommand("select * from CUSTOMER order by ID desc"); - graph = cmd.executeQuery(); - assertEquals(6, graph.getList("Customer").size()); - assertEquals("Smith", graph.getDataObject("Customer[1]").getString("lastName")); - assertEquals("400 Fourth Street", graph.getDataObject("Customer[1]").getString("address")); - - } - - public void testSingleTableMerge() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= ?"); - select.setParameter(1, "3"); - DataObject graph1 = select.executeQuery(); - assertEquals(3, graph1.getList("CUSTOMER").size()); - - select.setParameter(1, "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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= ?"); - select.setParameter(1, "3"); - DataObject graph1 = select.executeQuery(); - assertEquals(3, graph1.getList("CUSTOMER").size()); - - select.setParameter(1, "4"); - DataObject graph2 = select.executeQuery(); - assertEquals(4, graph2.getList("CUSTOMER").size()); - - select.setParameter(1, "5"); - DataObject graph3 = select.executeQuery(); - assertEquals(5, graph3.getList("CUSTOMER").size()); - - GraphMerger merger = new GraphMerger(); - merger.addPrimaryKey("CUSTOMER.ID"); - List 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 { - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - // Read some customers and related orders - Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " - + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); - - select.setParameter(1, Integer.valueOf(1)); - DataObject graph1 = select.executeQuery(); - - DataObject customer = (DataObject) graph1.getList("CUSTOMER").get(0); - assertEquals(2, customer.getList("orders").size()); - - select.setParameter(1, Integer.valueOf(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 { - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - // Read some customers and related orders - Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " - + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); - - select.setParameter(1, Integer.valueOf(1)); - DataObject graph1 = select.executeQuery(); - - DataObject customer = (DataObject) graph1.getList("CUSTOMER").get(0); - assertEquals(2, customer.getList("orders").size()); - - DAS das2 = DAS.FACTORY.createDAS(getConnection()); - Command select2 = das2.createCommand("select * from ANORDER"); - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java deleted file mode 100644 index 96a01455f5..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.ConfigHelper; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.config.Relationship; -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; -import commonj.sdo.Property; - -public class ImpliedRelationshipTests extends DasTest { - protected void setUp() throws Exception { - super.setUp(); - - new CustomerData(getAutoConnection()).refresh(); - new OrderData(getAutoConnection()).refresh(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - /** - * Ensure that an implied relationship is not created when a defined one already exists - * - * @throws Exception - */ - public void testRelationshipAlreadyDefined() throws Exception { - ConfigHelper helper = new ConfigHelper(); - Relationship r = helper.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID"); - r.setName("definedRelationship"); - - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - Command select = das.createCommand("select * from CUSTOMER left join ANORDER " - + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); - - DataObject root = select.executeQuery(); - DataObject cust = root.getDataObject("CUSTOMER[1]"); - Iterator i = cust.getType().getProperties().iterator(); - while (i.hasNext()) { - Property p = (Property) i.next(); - if (!p.getType().isDataType()) { - assertEquals(p.getName(), "definedRelationship"); - } - } - } - - /** - * Add a new Order to a list of Customers without defining any config information - * - * @throws Exception - */ - public void testAddNewOrder() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - - Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " - + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); - - DataObject root = select.executeQuery(); - - DataObject cust = root.getDataObject("CUSTOMER[1]"); - - // Save ID and Order Count - int custID = cust.getInt("ID"); - int custOrderCount = cust.getList("ANORDER").size(); - - // Create a new Order and add to customer1 - DataObject order = root.createDataObject("ANORDER"); - - order.set("ID", Integer.valueOf(99)); - order.set("PRODUCT", "The 99th product"); - order.set("QUANTITY", Integer.valueOf(99)); - cust.getList("ANORDER").add(order); - - assertEquals(custOrderCount + 1, cust.getList("ANORDER").size()); - - // Build apply changes command - das.applyChanges(root); - - // verify cust1 relationship updates - select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID " - + "where CUSTOMER.ID = ?"); - - select.setParameter(1, Integer.valueOf(custID)); - root = select.executeQuery(); - - assertEquals(custOrderCount + 1, root.getList("CUSTOMER[1]/ANORDER").size()); - } -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java deleted file mode 100644 index b2aa8a8691..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Timestamp; - -import org.apache.tuscany.das.rdb.Command; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.test.data.DogData; -import org.apache.tuscany.das.rdb.test.data.KennelData; -import org.apache.tuscany.das.rdb.test.data.OwnerData; -import org.apache.tuscany.das.rdb.test.data.OwnerDogData; -import org.apache.tuscany.das.rdb.test.data.VisitData; -import org.apache.tuscany.das.rdb.test.framework.DasTest; -import org.apache.tuscany.das.rdb.test.framework.TestData; - -import commonj.sdo.DataObject; - -public class KennelTests extends DasTest { - - protected void setUp() throws Exception { - super.setUp(); - - new DogData(getAutoConnection()).refresh(); - new OwnerData(getAutoConnection()).refresh(); - new OwnerDogData(getAutoConnection()).refresh(); - new KennelData(getAutoConnection()).refresh(); - new VisitData(getAutoConnection()).refresh(); - - - } - - public void testSimple() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - - // Build the select command - Command selectCommand = das.createCommand("select * from DOG"); - - // Get the graph - DataObject root = selectCommand.executeQuery(); - - assertEquals(3, root.getList("DOG").size()); - - } - - public void testSimple2() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - - // Build the select command - Command selectCommand = das.createCommand("select * from OWNER"); - - // Get the graph - DataObject root = selectCommand.executeQuery(); - - assertEquals(3, root.getList("OWNER").size()); - - } - - public void testSimple3() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - - // Build the select command - Command selectCommand = das.createCommand("select * from OWNER, DOG " - + "where DOG.OWNER_ID = OWNER.ID and OWNER.NAME = 'Fanny'"); - - // Get the graph - DataObject root = selectCommand.executeQuery(); - - //Get Fanny - DataObject fanny = root.getDataObject("OWNER[1]"); - assertEquals("Fido", fanny.getString("DOG[1]/NAME")); - - } - - public void testSimple4() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - - // Build the select command - Command selectCommand = das.createCommand("select * from KENNEL"); - - // Get the graph - DataObject root = selectCommand.executeQuery(); - - assertEquals(3, root.getList("KENNEL").size()); - - } - - public void testSimple5() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - - // Build the select command - Command selectCommand = das.createCommand("select * from VISIT"); - - // Get the graph - DataObject root = selectCommand.executeQuery(); - - assertEquals(3, root.getList("VISIT").size()); - assertEquals(TestData.getTimestamp("2006-10-20 00:00:00.0"), (Timestamp)root.get("VISIT[1]/CHECK_IN")); - - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java deleted file mode 100644 index 425995a68b..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.ConfigHelper; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.config.Config; -import org.apache.tuscany.das.rdb.config.ConfigFactory; -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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfig.xml"), getConnection()); - // Read a book instance - Command select = das.getCommand("select book 1"); - 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 = das.getCommand("update book 1"); - update.setParameter(1, new Integer(100)); - update.execute(); - - // Try to apply changes and catch the expected An update collision occurred - try { - das.applyChanges(root); - fail("An OCCException should be thrown"); - } catch (RuntimeException ex) { - if (!ex.getMessage().equals("An update collision occurred")) { - throw ex; - } - } - } - - public void testManagedOCC() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection()); - Command select = das.getCommand("select book 1"); - DataObject root = select.executeQuery(); - DataObject book = root.getDataObject("BOOK[1]"); - // Change a field to mark the instance 'dirty' - book.setInt("QUANTITY", 2); - int occValue = book.getInt("OCC"); - das.applyChanges(root); - - root = select.executeQuery(); - book = root.getDataObject("BOOK[1]"); - assertEquals(occValue + 1, book.getInt("OCC")); - } - - public void testManagedOCCFailure() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection()); - // Read a book instance - Command select = das.getCommand("select book 1"); - DataObject root = select.executeQuery(); - DataObject book = root.getDataObject("BOOK[1]"); - // Change a field to mark the instance 'dirty' - book.setInt("QUANTITY", 2); - - DAS das2 = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection()); - // Read a book instance - Command select2 = das2.getCommand("select book 1"); - DataObject root2 = select2.executeQuery(); - DataObject book2 = root2.getDataObject("BOOK[1]"); - // Change a field to mark the instance 'dirty' - book2.setInt("QUANTITY", 5); - das2.applyChanges(root2); - - // Try to apply changes and catch the expecetd An update collision occurred - try { - das.applyChanges(root); - fail("An OCCException should be thrown"); - } catch (RuntimeException ex) { - if (!ex.getMessage().equals("An update collision occurred")) { - throw ex; - } - } - } - - public void testProvidedConfig() throws Exception { - // Create config programmatically - Config config = ConfigFactory.INSTANCE.createConfig(); - ConfigHelper helper = new ConfigHelper(config); - helper.addPrimaryKey("BOOK.BOOK_ID"); - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - - // Read a book instance - Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1"); - 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 - - das.applyChanges(root); - - // Verify - root = select.executeQuery(); - book = root.getDataObject("BOOK[1]"); - assertEquals(2, book.getInt("QUANTITY")); - } -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java deleted file mode 100644 index 2a58ca0fba..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); - - Command read = das.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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); - - Command read = das.getCommand("get named employee with company"); - read.setParameter(1, "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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); - - Command read = das.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 - das.applyChanges(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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); - - Command read = das.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 - das.applyChanges(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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); - - Command read = das.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 - das.applyChanges(root); - - //Verify - root = read.executeQuery(); - - employee = root.getDataObject("COMPANY[1]/company->employee_opposite"); - - assertEquals("Joe Hotshot", employee.getString("NAME")); - - } - - public void testRestrictedOneToOneRelationship() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("OneToOneRestrictedConfig.xml"), getConnection()); - - Command read = das.getCommand("get named employee with company"); - read.setParameter(1, "Mary Smith"); - DataObject root = read.executeQuery(); - DataObject mary = root.getDataObject("EMPLOYEE[1]"); - DataObject company = mary.getDataObject("company"); - - DataObject bob = root.createDataObject("EMPLOYEE"); - bob.setString("NAME", "bob"); - bob.setString("SN", "E0005"); - bob.setInt("MANAGER", 0); - - bob.setDataObject("company", company); - - try { - das.applyChanges(root); - fail("Relationship modification should not be allowed."); - } catch (RuntimeException ex) { - assertEquals("Can not modify a one to one relationship that is key restricted", ex.getMessage()); - } - assertEquals("ACME Publishing", company.getString("NAME")); - - } -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java deleted file mode 100644 index ccfae70bd5..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.Iterator; -import java.util.List; - -import org.apache.tuscany.das.rdb.Command; -import org.apache.tuscany.das.rdb.DAS; -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 { - - public OperationOrderingTests() { - super(); - } - - 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 void testInsert() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection()); - Command select = das.createCommand("Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID"); - 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); - - das.applyChanges(root); - - root = select.executeQuery(); - assertEquals(numberOfCities + 1, root.getList("CITIES").size()); - assertEquals(numberOfStates + 1, root.getList("STATES").size()); - } - - public void testDeletes() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection()); - Command select = das.createCommand("Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID"); - DataObject root = select.executeQuery(); - - DataObject firstState = root.getDataObject("STATES[1]"); - String stateName = firstState.getString("NAME"); - - List cityNames = new ArrayList(); - Iterator i = firstState.getList("cities").iterator(); - while (i.hasNext()) { - DataObject firstCity = (DataObject) i.next(); - cityNames.add(firstCity.getString("NAME")); - firstCity.delete(); - } - firstState.delete(); - - das.applyChanges(root); - - root = select.executeQuery(); - - Iterator iter = root.getList("STATES").iterator(); - while (iter.hasNext()) { - DataObject state = (DataObject) iter.next(); - assertFalse(state.getString("NAME").equals(stateName)); - } - - iter = root.getList("CITIES").iterator(); - while (iter.hasNext()) { - DataObject city = (DataObject) iter.next(); - assertFalse(cityNames.contains(city.getString("NAME"))); - } - - } -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java deleted file mode 100644 index f84d84c0bc..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Build command to read all customers - Command custCommand = das.createCommand("select * from CUSTOMER order by ID"); - - // 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Build the select command - Command select = das.createCommand("select * from CUSTOMER order by ID"); - - // 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java deleted file mode 100644 index e43d773ada..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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 { - - public PartialUpdateTests() { - super(); - } - - protected void setUp() throws Exception { - super.setUp(); - new CustomerData(getAutoConnection()).refresh(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - public void testPartialUpdate() throws SQLException { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); - - // Read - DataObject root = readCustomers.executeQuery(); - - DataObject customer = root.getDataObject("CUSTOMER[1]"); - // Verify - assertEquals(1, customer.getInt("ID")); - - Command update = das.createCommand("update CUSTOMER set LASTNAME = 'modified' where ID = 1"); - update.execute(); - - customer.setString("ADDRESS", "main street"); - - das.applyChanges(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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); - - // Read - DataObject root = readCustomers.executeQuery(); - - // Create a new customer - DataObject newCust = root.createDataObject("CUSTOMER"); - newCust.set("ID", Integer.valueOf(100)); - newCust.set("ADDRESS", "5528 Wells Fargo Drive"); - // Purposely do not set lastname to let it default to 'Garfugengheist' - // newCust.set("LASTNAME", "Gerkin" ); - - das.applyChanges(root); - - Command readNewCust = das.createCommand("select * from CUSTOMER where ID = 100"); - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java deleted file mode 100644 index 270f46ddd8..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.DAS; -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(); - - DAS das = DAS.FACTORY.createDAS(getConfig("passiveConnection.xml"), c); - // Read customer 1 - Command select = das.getCommand("get a customer"); - DataObject root = select.executeQuery(); - - DataObject customer = (DataObject) root.get("CUSTOMER[1]"); - - String lastName = customer.getString("LASTNAME"); - - // Modify customer - customer.set("LASTNAME", "Pavick"); - - try { - das.applyChanges(root); - - throw new Exception("Test Exception"); - - // Since the DAS is not managing tx boundaries, I must - } catch (Exception e) { - // assert here to make sure we didn't run into some hidden error - assertEquals("Test Exception", e.getMessage()); - // Roll back the transaction - c.rollback(); - } - - // Verify that the changes did not go through - root = select.executeQuery(); - assertEquals(lastName, root.getString("CUSTOMER[1]/LASTNAME")); - - // Try again - customer = (DataObject) root.get("CUSTOMER[1]"); - customer.set("LASTNAME", "Pavick"); - das.applyChanges(root); - c.commit(); - - root = select.executeQuery(); - assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java deleted file mode 100644 index 7f44399187..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.ConfigHelper; -import org.apache.tuscany.das.rdb.DAS; -import org.apache.tuscany.das.rdb.config.Config; -import org.apache.tuscany.das.rdb.config.ConnectionInfo; -import org.apache.tuscany.das.rdb.config.Table; -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 test1() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Read a book instance - Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1"); - DataObject root = select.executeQuery(); - - DataObject book = root.getDataObject("BOOK[1]"); - // Change a field to mark the instance 'dirty' - book.setInt("QUANTITY", 2); - - try { - das.applyChanges(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 test2() throws Exception { - // Create config programmatically - ConfigHelper helper = new ConfigHelper(); - helper.addPrimaryKey("BOOK.BOOK_ID"); - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - - // Read a book instance - Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1"); - 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 - - das.applyChanges(root); - - // Verify - root = select.executeQuery(); - book = root.getDataObject("BOOK[1]"); - assertEquals(2, book.getInt("QUANTITY")); - } - - /** - * Test ability to read a compound graph - */ - public void test3() 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"); - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - Command select = das.createCommand(statement); - - 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 test4() throws Exception { - - String statement = "SELECT * FROM BOOK WHERE BOOK.BOOK_ID = ?"; - - // Create Table config programmatically - ConfigHelper helper = new ConfigHelper(); - helper.addTable("BOOK", "Book"); - helper.addPrimaryKey("Book.BOOK_ID"); - - DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); - Command select = das.createCommand(statement); - select.setParameter(1, Integer.valueOf(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); - - das.applyChanges(root); - - //Verify - select.setParameter(1, Integer.valueOf(1001)); - root = select.executeQuery(); - assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME")); - - } - - /** - * Simple unit test for ConnectionInfo - * @throws Exception - */ - public void testConnectionInfo() throws Exception { - ConfigHelper helper = new ConfigHelper(); - helper.addConnectionInfo("jdbc/adatasource"); - - Config config = helper.getConfig(); - ConnectionInfo info = config.getConnectionInfo(); - assertEquals(info.getDataSource(), "jdbc/adatasource"); - assertEquals(info.isManagedtx(), true); - } - - /** - * Simple unit test for ConnectionInfo - * @throws Exception - */ - public void testConnectionInfo2() throws Exception { - ConfigHelper helper = new ConfigHelper(); - helper.addConnectionInfo("jdbc/adatasource", false); - - Config config = helper.getConfig(); - ConnectionInfo info = config.getConnectionInfo(); - assertEquals(info.getDataSource(), "jdbc/adatasource"); - assertEquals(info.isManagedtx(), false); - } - - /** - * Simple unit test for adding a select command - * @throws Exception - */ - public void testAddSelectCommand() throws Exception { - ConfigHelper helper = new ConfigHelper(); - helper.addSelectCommand("get all customers", "select * from customers"); - - Config config = helper.getConfig(); - List commands = config.getCommand(); - assertEquals(1, commands.size()); - org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); - assertEquals("select", cmd.getKind()); - assertEquals("get all customers", cmd.getName()); - assertEquals("select * from customers", cmd.getSQL()); - } - - /** - * Simple unit test for adding an update command - * @throws Exception - */ - public void testAddUpdateCommand() throws Exception { - ConfigHelper helper = new ConfigHelper(); - helper.addUpdateCommand("update a customer", "update customers set name = ? where id = ?"); - - Config config = helper.getConfig(); - List commands = config.getCommand(); - assertEquals(1, commands.size()); - org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); - assertEquals("update", cmd.getKind()); - assertEquals("update a customer", cmd.getName()); - assertEquals("update customers set name = ? where id = ?", cmd.getSQL()); - } - - /** - * Simple unit test for adding an insert command - * @throws Exception - */ - public void testAddInsertCommand() throws Exception { - ConfigHelper helper = new ConfigHelper(); - helper.addInsertCommand("insert customer", "insert into customers(ID,NAME) values (?,?)"); - - Config config = helper.getConfig(); - List commands = config.getCommand(); - assertEquals(1, commands.size()); - org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); - assertEquals("insert", cmd.getKind()); - assertEquals("insert customer", cmd.getName()); - assertEquals("insert into customers(ID,NAME) values (?,?)", cmd.getSQL()); - } - - /** - * Simple unit test for adding a delete command - * @throws Exception - */ - public void testAddDeleteCommand() throws Exception { - ConfigHelper helper = new ConfigHelper(); - helper.addDeleteCommand("delete customer", "delete from customers where id = ?"); - - Config config = helper.getConfig(); - List commands = config.getCommand(); - assertEquals(1, commands.size()); - org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); - assertEquals("delete", cmd.getKind()); - assertEquals("delete customer", cmd.getName()); - assertEquals("delete from customers where id = ?", cmd.getSQL()); - } - - /** - * Simple unit test for DataObjectModel - * @throws Exception - */ - public void testDataObjectModel() throws Exception { - ConfigHelper helper = new ConfigHelper(); - helper.setDataObjectModel("org.apache.tuscany/mytypes"); - - Config config = helper.getConfig(); - assertEquals("org.apache.tuscany/mytypes", config.getDataObjectModel()); - - } - - /** - * Simple unit test for adding a Delete statement to a Table - * @throws Exception - */ - public void testAddDeleteStatement() throws Exception { - ConfigHelper helper = new ConfigHelper(); - Table table = helper.addTable("widgets", "WIDGETS"); - helper.addDeleteStatement(table, "delete from widgets where id = ?", "ID"); - - Config cfg = helper.getConfig(); - assertEquals(1, cfg.getTable().size()); - Table widgets = (Table) cfg.getTable().get(0); - assertEquals("delete from widgets where id = ?", widgets.getDelete().getSql()); - assertEquals("WIDGETS", widgets.getTypeName()); - assertEquals("ID", widgets.getDelete().getParameters()); - - } - - /** - * Simple unit test for adding a Create statement to a Table - * @throws Exception - */ - public void testAddCreateStatement() throws Exception { - ConfigHelper helper = new ConfigHelper(); - Table table = helper.addTable("widgets", "WIDGETS"); - helper.addCreateStatement(table, "insert into widgets values (?,?)", "ID NAME"); - - Config cfg = helper.getConfig(); - assertEquals(1, cfg.getTable().size()); - Table widgets = (Table) cfg.getTable().get(0); - assertEquals("insert into widgets values (?,?)", widgets.getCreate().getSql()); - assertEquals("WIDGETS", widgets.getTypeName()); - assertEquals("ID NAME", widgets.getCreate().getParameters()); - - } -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java deleted file mode 100644 index 6fb52ad17d..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command select = das.createCommand("SELECT * from SYSIBM.SYSTABLES WHERE TYPE = 'T'"); - DataObject root = select.executeQuery(); - - DataObject table = (DataObject) root.get("SYSTABLES[1]"); - - assertEquals('T', table.getChar("TYPE")); - - } - - //Utilities - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java deleted file mode 100644 index 4af085a6a5..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -import org.apache.tuscany.das.rdb.test.data.PartData; -import org.apache.tuscany.das.rdb.test.framework.DasTest; - -import commonj.sdo.DataObject; - -public class RecursiveTests extends DasTest { - - protected void setUp() throws Exception { - super.setUp(); - new PartData(getAutoConnection()).refresh(); - } - - public void testReadEngineParts() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConfig("PartsConfig.xml"), getConnection()); - // Table definition - // CREATE TABLE PART (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), QUANTITY INT, PARENT_ID INT ); - - Command select = das.getCommand("readEngineParts"); - - // 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java deleted file mode 100644 index 426b5fbbf0..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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"; - - DAS das = DAS.FACTORY.createDAS(getConfig("customerOrderRelationshipMapping.xml"), getConnection()); - // Read some customers and related orders - Command select = das.createCommand(statement); - - 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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerOrderMapping.xml"), getConnection()); - // Read some customers and related orders - Command select = das - .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); - - 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 = Integer.valueOf(cust1.getList("orders").size()); - Integer cust2OrderCount = Integer.valueOf(cust2.getList("orders").size()); - - // Move an order to cust1 from cust2 - DataObject order = (DataObject) cust2.getList("orders").get(0); - cust1.getList("orders").add(order); - - // Flush changes - das.applyChanges(root); - - // verify cust1 relationship updates - select = das - .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " - + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); - select.setParameter(1, cust1ID); - - root = select.executeQuery(); - assertEquals(cust1OrderCount.intValue() + 1, root.getList("CUSTOMER[1]/orders").size()); - - // verify cust2 relationship updates - select.setParameter(1, cust2ID); - root = select.executeQuery(); - assertEquals(cust2OrderCount.intValue() - 1, root.getList("CUSTOMER[1]/orders").size()); - - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java deleted file mode 100644 index b259fc4e2d..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -import org.apache.tuscany.das.rdb.test.data.CustomerData; -import org.apache.tuscany.das.rdb.test.framework.DasTest; - -import commonj.sdo.DataObject; - -/** - * 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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfigWithIDConverter.xml"), getConnection()); - // Create and initialize command to read customers - Command readCustomers = das.getCommand("literal"); - - // 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"; - - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Create and initialize command to read customers - Command readCustomers = das.createCommand(sqlString); - - // 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java deleted file mode 100644 index ca6174956e..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java deleted file mode 100644 index 32c60a2760..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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 - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); - - // Read - DataObject root = readCustomers.executeQuery(); - - // Verify - assertEquals(1, root.getInt("CUSTOMER[1]/ID")); - } - - /** - * Read a specific customer - */ - public void testReadSingle2() throws Exception { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Create and initialize command to read customers - Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); - - // Read - DataObject root = readCustomers.executeQuery(); - - // 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Create and initialize command to read customers - Command readCustomers = das.createCommand(" select * from CUSTOMER where ID = 1"); - - // 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 { - - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Create and initialize command to read customers - Command readCustomers = das.createCommand("select * from CUSTOMER where LASTNAME = 'Williams'"); - - // 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Create and initialize command to read customers - Command readCustomers = das.createCommand("select * from CUSTOMER where LASTNAME = ?"); - - // Parameterize the command - readCustomers.setParameter(1, "Williams"); - DataObject root = readCustomers.executeQuery(); - - // Verify - assertEquals(4, root.getList("CUSTOMER").size()); - } - - public void testInsert() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into CUSTOMER values (10, 'Williams', '5528 Wells Fargo Dr')"); - insert.execute(); - - // Verify - Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); - 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); - insert.setParameter(1, Integer.valueOf(10)); - insert.setParameter(2, "Williams"); - insert.setParameter(3, "5528 Wells Fargo Dr"); - insert.execute(); - - // Verify - Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); - 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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Verify pre-condition - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - assertEquals(1, root.getList("CUSTOMER").size()); - - // Create and execute the delete command - Command delete = das.createCommand("delete from CUSTOMER where ID = 1"); - delete.execute(); - - // Verify delete by reusing the original select command - root = select.executeQuery(); - assertEquals(0, root.getList("CUSTOMER").size()); - - } - - public void testUpdate() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Verify pre-condition - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick")); - - Command update = das.createCommand("update CUSTOMER set LASTNAME = 'Pavick' where ID = 1"); - update.execute(); - - // Verify update - reuse select command - root = select.executeQuery(); - assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME")); - - } - - public void testUpdateWithParameters() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Verify pre-condition - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick")); - - Command update = das.createCommand("update CUSTOMER set LASTNAME = ? where ID = ?"); - update.setParameter(1, "Pavick"); - update.setParameter(2, Integer.valueOf(1)); - update.execute(); - - // Verify update - reuse select command - root = select.executeQuery(); - assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME")); - - } - - public void testUpdateWithParmarkers() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Verify pre-condition - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick")); - - Command update = das.createCommand("update CUSTOMER set LASTNAME = ? where ID = ?"); - update.setParameter(1, "Pavick"); - update.setParameter(2, Integer.valueOf(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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java deleted file mode 100644 index b085906bd0..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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(); - } - - public void testMultipleResultSets() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command read = das.createCommand("{call GETALLCUSTOMERSANDORDERS()}"); - - DataObject root = read.executeQuery(); - - // Verify - assertEquals(5, root.getList("CUSTOMER").size()); - assertEquals(4, root.getList("ANORDER").size()); - } - - // Call a simple stored proc to read all companies - public void testGetCompanies() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command read = das.createCommand("{call GETALLCOMPANIES()}"); - - DataObject root = read.executeQuery(); - - // Verify - assertEquals(3, root.getList("COMPANY").size()); - assertTrue(root.getInt("COMPANY[1]/ID") > 0); - - } - - public void testGetNamedCompany() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command read = das.createCommand("{call GETNAMEDCOMPANY(?)}"); - - read.setParameter(1, "MegaCorp"); - DataObject root = read.executeQuery(); - - assertEquals("MegaCorp", root.getString("COMPANY[1]/NAME")); - - } - - public void testGetNamedCompanyByName() throws Exception { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command read = das.createCommand("{call GETNAMEDCOMPANY(?)}"); - - read.setParameter(1, "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 { - DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); - Command read = das.createCommand("{call getCustomerAndOrders(?)}"); - read.setParameter(1, Integer.valueOf(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 { - DAS das = DAS.FACTORY.createDAS(getConfig("storedProcTest.xml"), getConnection()); - Command read = das.getCommand("getNamedCustomers"); - read.setParameter(1, "Williams"); - DataObject root = read.executeQuery(); - - Integer customersRead = (Integer) read.getParameter(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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - Command delete = das.createCommand("{call DELETECUSTOMER(?)}"); - delete.setParameter(1, Integer.valueOf(1)); - delete.execute(); - - // Verify DELETE - Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); - DataObject root = select.executeQuery(); - assertTrue(root.getList("CUSTOMER").isEmpty()); - - } - -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java deleted file mode 100644 index d9f880e92d..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -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.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; - -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 { - - DAS das = DAS.FACTORY.createDAS(getConfig("staticCustomerOrder.xml"), getConnection()); - - Command select = das.getCommand("Customer and Orders"); - - SDOUtil.registerStaticTypes(CustomerFactory.class); - - // Parameterize the command - select.setParameter(1, Integer.valueOf(1)); - - // Get the graph - DataGraphRoot is from the typed package - DataObject root = select.executeQuery(); - - // Modify a customer - Customer customer = (Customer) root.getDataObject("Customer[1]"); - customer.setLastName("Pavick"); - - // Modify an order - AnOrder order = (AnOrder) customer.getOrders().get(0); - order.setProduct("Kitchen Sink 001"); - - // Flush changes - das.applyChanges((DataObject) root); - - } - -} \ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java deleted file mode 100644 index e6972357f6..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.Command; -import org.apache.tuscany.das.rdb.DAS; -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 { - DAS das = DAS.FACTORY.createDAS(getConnection()); - // Read customer 1 - Command select = das.createCommand("Select * from TYPETEST where ID = 1"); - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java deleted file mode 100644 index f98e014ca9..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; - -public class ReadCustomersByLastnameCommand extends ReadCommandImpl { - - private static final String SQL_STRING = "select * from CUSTOMER where LASTNAME = ?"; - - private static final Config CONFIG; - - static { - ConfigFactory factory = ConfigFactory.INSTANCE; - CONFIG = factory.createConfig(); - Table t = factory.createTable(); - Column id = factory.createColumn(); - id.setColumnName("ID"); - id.setPrimaryKey(true); - Column lastname = factory.createColumn(); - lastname.setColumnName("LASTNAME"); - Column address = factory.createColumn(); - address.setColumnName("ADDRESS"); - - t.getColumn().add(id); - t.getColumn().add(lastname); - t.getColumn().add(address); - t.setTableName("CUSTOMER"); - CONFIG.getTable().add(t); - } - - public ReadCustomersByLastnameCommand() { - super(SQL_STRING, new MappingWrapper(CONFIG), null); - } -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java deleted file mode 100644 index 7a4b8f49dd..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; - -public class ReadCustomersCommand extends ReadCommandImpl { - - private static final String SQL_STRING = "select * from CUSTOMER"; - - private static final Config CONFIG; - - static { - ConfigFactory factory = ConfigFactory.INSTANCE; - CONFIG = factory.createConfig(); - Table t = factory.createTable(); - Column id = factory.createColumn(); - id.setColumnName("ID"); - id.setPrimaryKey(true); - Column lastname = factory.createColumn(); - lastname.setColumnName("LASTNAME"); - Column address = factory.createColumn(); - address.setColumnName("ADDRESS"); - - t.getColumn().add(id); - t.getColumn().add(lastname); - t.getColumn().add(address); - t.setTableName("CUSTOMER"); - CONFIG.getTable().add(t); - } - - public ReadCustomersCommand() { - super(SQL_STRING, new MappingWrapper(CONFIG), null); - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java deleted file mode 100644 index 407a43c21f..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; - -public class ReadCustomersStaticTypesCommand extends ReadCommandImpl { - - private static final String SQL_STRING = "Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = ?"; - - private static final Config CONFIG; - - static { - ConfigFactory factory = ConfigFactory.INSTANCE; - CONFIG = factory.createConfig(); - Table t = factory.createTable(); - Column id = factory.createColumn(); - id.setColumnName("ID"); - id.setPrimaryKey(true); - Column lastname = factory.createColumn(); - lastname.setColumnName("LASTNAME"); - Column address = factory.createColumn(); - address.setColumnName("ADDRESS"); - - t.getColumn().add(id); - t.getColumn().add(lastname); - t.getColumn().add(address); - t.setTableName("CUSTOMER"); - t.setTypeName("Customer"); - CONFIG.getTable().add(t); - - CONFIG.setDataObjectModel("http:///org.apache.tuscany.das.rdb.test/customer.xsd"); - } - - public ReadCustomersStaticTypesCommand() { - super(SQL_STRING, new MappingWrapper(CONFIG), null); - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java deleted file mode 100644 index ba771ca3e5..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.ArrayList; -import java.util.List; - -import org.apache.tuscany.das.rdb.config.ConfigFactory; -import org.apache.tuscany.das.rdb.config.ResultDescriptor; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; - -public class ReadCustomersWithShapeCommand extends ReadCommandImpl { - // This sql string ensures that we won't have resultset metadata - static String sqlString = "select * from customer union select * from customer"; - - static List descriptor = new ArrayList(); - - static { - ConfigFactory factory = ConfigFactory.INSTANCE; - - ResultDescriptor desc1 = factory.createResultDescriptor(); - desc1.setColumnName("ID"); - desc1.setColumnType("commonj.sdo.Int"); - desc1.setTableName("CUSTOMER"); - - ResultDescriptor desc2 = factory.createResultDescriptor(); - desc2.setColumnName("LASTNAME"); - desc2.setColumnType("commonj.sdo.String"); - desc2.setTableName("CUSTOMER"); - - ResultDescriptor desc3 = factory.createResultDescriptor(); - desc3.setColumnName("ADDRESS"); - desc3.setColumnType("commonj.sdo.String"); - desc3.setTableName("CUSTOMER"); - - descriptor.add(desc1); - descriptor.add(desc2); - descriptor.add(desc3); - - } - - public ReadCustomersWithShapeCommand() { - super(sqlString, new MappingWrapper(), descriptor); - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java deleted file mode 100644 index 44eea42445..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.util.ArrayList; -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.ConfigFactory; -import org.apache.tuscany.das.rdb.config.ResultDescriptor; -import org.apache.tuscany.das.rdb.config.Table; -import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; -import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; - -public class SimpleReadCustomersWithShapeCommand extends ReadCommandImpl { - - // This sql string ensures that we won't have resultset metadata - private static final String SQL_STRING = "Select * from customer union select * from customer"; - - private static final List DESCRIPTOR = new ArrayList(); - - private static final Config CONFIG; - - static { - ConfigFactory factory = ConfigFactory.INSTANCE; - CONFIG = factory.createConfig(); - Table t = factory.createTable(); - Column id = factory.createColumn(); - id.setColumnName("ID"); - id.setPrimaryKey(true); - Column lastname = factory.createColumn(); - lastname.setColumnName("LASTNAME"); - Column address = factory.createColumn(); - address.setColumnName("ADDRESS"); - - t.getColumn().add(id); - t.getColumn().add(lastname); - t.getColumn().add(address); - t.setTableName("CUSTOMER"); - CONFIG.getTable().add(t); - - ResultDescriptor desc1 = factory.createResultDescriptor(); - desc1.setColumnName("ID"); - desc1.setColumnType("commonj.sdo.Int"); - desc1.setTableName("CUSTOMER"); - - ResultDescriptor desc2 = factory.createResultDescriptor(); - desc2.setColumnName("LASTNAME"); - desc2.setColumnType("commonj.sdo.String"); - desc2.setTableName("CUSTOMER"); - - ResultDescriptor desc3 = factory.createResultDescriptor(); - desc3.setColumnName("ADDRESS"); - desc3.setColumnType("commonj.sdo.String"); - desc3.setTableName("CUSTOMER"); - - DESCRIPTOR.add(desc1); - DESCRIPTOR.add(desc2); - DESCRIPTOR.add(desc3); - } - - public SimpleReadCustomersWithShapeCommand() { - super(SQL_STRING, new MappingWrapper(CONFIG), DESCRIPTOR); - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java deleted file mode 100644 index 632a4d057d..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 = {{Integer.valueOf(1), "The Brothers Karamazov", "Fyodor Dostoevsky", - Integer.valueOf(5), Integer.valueOf(17)}, - {Integer.valueOf(2), "Cat in the Hat", "Doctor Seuss", Integer.valueOf(10), Integer.valueOf(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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java deleted file mode 100644 index 7ce5cf757d..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 = {{Integer.valueOf(1), "Lizard Lick", "1"}, - {Integer.valueOf(2), "Morrisville", "1"}, - {Integer.valueOf(3), "Breckenridge", "2"}, - {Integer.valueOf(4), "Barstow", "3"}, - {Integer.valueOf(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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java deleted file mode 100644 index 0c28ed2caa..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java deleted file mode 100644 index 686e3243cb..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 { - - private 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java deleted file mode 100644 index b1d3fb12b5..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 { - - protected 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java deleted file mode 100644 index 9ec6c8003d..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 = {{Integer.valueOf(1), "Williams", "1212 foobar lane"}, - {Integer.valueOf(2), "Daniel", "156 Brentfield Loop"}, {Integer.valueOf(3), "Williams", "456 penny lane"}, - {Integer.valueOf(4), "Williams", "5000 pineville"}, {Integer.valueOf(5), "Williams", "100000 firefly lane"}}; - - public CustomerData(Connection connection) { - super(connection, customerData); - } - - public String getTableName() { - return "CUSTOMER"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java deleted file mode 100644 index ad8ff14e86..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java deleted file mode 100644 index 906a30cc06..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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", "DEPNUMBER"}; - - public DepartmentData(Connection connection) { - super(connection, deptData, deptColumns, columnTypes); - } - - public String getTableName() { - return "DEPARTMENT"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java deleted file mode 100644 index 3c686e6fea..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 DogData extends TestDataWithExplicitColumns { - - /* CREATE TABLE DOG ( - ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - OWNER_ID INTEGER UNSIGNED NOT NULL, - NAME VARCHAR(20) NOT NULL, - BREED VARCHAR(20) NULL, - OCC_COUNT INTEGER UNSIGNED NULL, - PRIMARY KEY(ID), - );*/ - - //id and owner_id omitted. id is auto-generated. owner_id is filled in by DogOwner data - private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.INTEGER}; - - private static Object[][] data = {{"Fido", "Mutt", Integer.valueOf(1)}, - {"Max", "German Shepherd", Integer.valueOf(1)}, - {"Saddie", "Collie", Integer.valueOf(1)}}; - - private static String[] columns = {"NAME", "BREED", "OCC_COUNT"}; - - public DogData(Connection connection) { - super(connection, data, columns, columnTypes); - } - - public String getTableName() { - return "DOG"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java deleted file mode 100644 index 8c53dea790..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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", Boolean.valueOf(false)}, - {"Mary Smith", "E0002", Boolean.valueOf(true)}, - {"Jane Doe", "E0003", Boolean.valueOf(false)}, {"Al Smith", "E0004", Boolean.valueOf(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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java deleted file mode 100644 index 01423ee40e..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 KennelData extends TestDataWithExplicitColumns { - - /* CREATE TABLE KENNEL ( - ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - KNUMBER INTEGER UNSIGNED NULL, - KIND VARCHAR(20) NULL, - OCC_COUNT INTEGER UNSIGNED NULL, - PRIMARY KEY(ID) - );*/ - - //id omitted. id is auto-generated. - private static int[] columnTypes = {Types.INTEGER, Types.VARCHAR, Types.INTEGER}; - - private static Object[][] data = {{Integer.valueOf(100), "Small", Integer.valueOf(1)}, - {Integer.valueOf(101), "Small", Integer.valueOf(1)}, - {Integer.valueOf(102), "Large", Integer.valueOf(1)}}; - - private static String[] columns = {"KNUMBER", "KIND", "OCC_COUNT"}; - - public KennelData(Connection connection) { - super(connection, data, columns, columnTypes); - } - - public String getTableName() { - return "KENNEL"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java deleted file mode 100644 index 2568dd1a9f..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 { - - protected static Object[][] orderData = { - {Integer.valueOf(1), "recombobulator", Integer.valueOf(47), Integer.valueOf(1)}, - {Integer.valueOf(2), "wrench", Integer.valueOf(17), Integer.valueOf(3)}, - {Integer.valueOf(3), "pliers", Integer.valueOf(500), Integer.valueOf(1)}, - {Integer.valueOf(4), "Tooth Paste", Integer.valueOf(12), Integer.valueOf(2)}}; - - public OrderData(Connection c) { - super(c, orderData); - } - - public String getTableName() { - return "ANORDER"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java deleted file mode 100644 index 9f5897b373..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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)) - - protected static Object[][] orderDetailsData = {{Integer.valueOf(1), Integer.valueOf(1), new Float(1.1)}, - {Integer.valueOf(1), Integer.valueOf(2), new Float(1.2)}, - {Integer.valueOf(2), Integer.valueOf(1), new Float(2.1)}, - {Integer.valueOf(2), Integer.valueOf(2), new Float(2.2)}}; - - public OrderDetailsData(Connection c) { - super(c, orderDetailsData); - } - - public String getTableName() { - return "ORDERDETAILS"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java deleted file mode 100644 index b5198bce36..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 OwnerData extends TestDataWithExplicitColumns { - - /* CREATE TABLE OWNER ( - ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - NAME VARCHAR(20) NULL, - CONTACT_PHONE VARCHAR(20) NULL, - OCC_COUNT INTEGER UNSIGNED NULL, - PRIMARY KEY(ID) - );*/ - - //id omitted. id is auto-generated. - private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.INTEGER}; - - private static Object[][] data = {{"Fanny", "222-2222", Integer.valueOf(1)}, - {"Manny", "333-3333", Integer.valueOf(1)}, - {"Sammy", "444-4444", Integer.valueOf(1)}}; - - private static String[] columns = {"NAME", "CONTACT_PHONE", "OCC_COUNT"}; - - public OwnerData(Connection connection) { - super(connection, data, columns, columnTypes); - } - - public String getTableName() { - return "OWNER"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java deleted file mode 100644 index a06a2124f3..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 OwnerDogData extends RelationshipData { - - private static final Object[][] DATA = {{"Fanny", "Fido"}, {"Manny", "Max"}, {"Sammy", "Saddie"}}; - - public OwnerDogData(Connection c) { - super(c, DATA); - } - - protected String getParentRetrievalStatement() { - return "select ID from OWNER where NAME = ?"; - } - - protected String getChildUpdateStatement() { - return "update DOG set OWNER_ID = ? where NAME = ?"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java deleted file mode 100644 index ff59b03aef..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 = {{Integer.valueOf(1), "Engine", Integer.valueOf(1), null}, - {Integer.valueOf(2), "Block", Integer.valueOf(1), Integer.valueOf(1)}, - {Integer.valueOf(3), "Cam Shaft", Integer.valueOf(2), Integer.valueOf(1)}, - {Integer.valueOf(4), "Piston", Integer.valueOf(8), Integer.valueOf(1)}, - {Integer.valueOf(5), "Piston Ring", Integer.valueOf(2), Integer.valueOf(4)}}; - - public PartData(Connection connection) { - super(connection, partData, partColumns, columnTypes); - } - - public String getTableName() { - return "PART"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java deleted file mode 100644 index 713aecb9a3..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 { - private static Object[][] stateData = {{Integer.valueOf(1), "NC"}, {Integer.valueOf(2), "CO"}, - {Integer.valueOf(3), "CA"}}; - - public StateData(Connection c) { - super(c, stateData); - } - - public String getTableName() { - return "STATES"; - } - - - public void doDeletes() throws SQLException { - deleteRowsFromTable(); - } - - public void doInserts() throws SQLException { - insertRows(); - - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java deleted file mode 100644 index 0aac15fb7d..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 TypesData extends TestData { - - private static Object[][] customerData = {{Integer.valueOf(1), TIMESTAMP, - new Float(1234567.89), new Float(1234567.89)}}; - - public TypesData(Connection connection) { - super(connection, customerData); - } - - public String getTableName() { - return "TYPETEST"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java deleted file mode 100644 index c9cebc7688..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 VisitData extends TestDataWithExplicitColumns { - - /* - * CREATE TABLE VISIT ( ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - * CHECK_IN TIMESTAMP NULL, CHECK_OUT TIMESTAMP NULL, OCC_COUNT INTEGER UNSIGNED - * NULL, PRIMARY KEY(ID) ); - */ - - // id omitted. id is auto-generated. - private static int[] columnTypes = {Types.TIMESTAMP, Types.TIMESTAMP, Types.INTEGER}; - - private static Object[][] data = { - {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)}, - {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)}, - {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)}}; - - private static String[] columns = {"CHECK_IN", "CHECK_OUT", "OCC_COUNT"}; - - public VisitData(Connection connection) { - super(connection, data, columns, columnTypes); - } - - public String getTableName() { - return "VISIT"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java deleted file mode 100644 index 370c1d42d7..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java deleted file mode 100644 index 78b1cf19e1..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.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 { - - protected static Connection connection; - - /** - * 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() { - - // 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) { - return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName); - } - - protected void write(String label, ResultSet rs) throws 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java deleted file mode 100644 index 9cc012e830..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 Statement s; - - protected String platformName = "Not initialized"; - - protected String driverName = "Not initialized"; - - protected String databaseURL = "Not initialized"; - - protected String userName; - - protected String password; - - // Data Types - protected String stringType = "VARCHAR"; - - protected String integerType = "INT"; - - protected String timestampType = "TIMESTAMP"; - - protected String floatType = "FLOAT"; - - protected String decimalType = "DECIMAL"; - - private Connection connection; - - 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(); - if (userName != null) { - connection = DriverManager.getConnection(databaseURL, userName, password); - } else { - connection = DriverManager.getConnection(databaseURL); - } - connection.setAutoCommit(false); - - } catch (SQLException e) { - - if (e.getNextException() != null) { - e.getNextException().printStackTrace(); - } else { - e.printStackTrace(); - } - - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - - } - - protected void setUp() throws Exception { - - System.out.println("Setting up for " + platformName + " run"); - - s = connection.createStatement(); - - try { - dropTriggers(); - dropSequences(); - dropTables(); - dropProcedures(); - - createSequences(); - createTables(); - createTriggers(); - 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", "DROP TABLE DOG", "DROP TABLE OWNER", - "DROP TABLE KENNEL", "DROP TABLE VISIT" - }; - - 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")) && (!e.getMessage().contains("Unknown table")) - && (!e.getMessage().contains("42704"))) { - throw new RuntimeException(e); - } - } - } - } - - protected void dropTriggers() { - - } - - protected void createTriggers() { - - } - - protected void dropSequences() { - - } - - protected void createSequences() { - - } - - 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", "DROP PROCEDURE GETALLCUSTOMERSANDORDERS" - - }; - - 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") && !e.getMessage().contains("42704")) { - 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()); - - s.execute(getCreateDog()); - s.execute(getCreateOwner()); - s.execute(getCreateKennel()); - s.execute(getCreateVisit()); - - } 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'"); - s.execute("CREATE PROCEDURE GETALLCUSTOMERSANDORDERS() PARAMETER STYLE JAVA LANGUAGE JAVA " - + "READS SQL DATA DYNAMIC RESULT SETS 2 EXTERNAL NAME " - + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getAllCustomersAndAllOrders'"); - // 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 (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " - + getStringColumn("LASTNAME", 30) - + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")"; - } - - protected String getCreateAnOrder() { - return "CREATE TABLE ANORDER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " - + getStringColumn("PRODUCT", 30) + ", " - + getIntegerColumn("QUANTITY") + "," + getIntegerColumn("CUSTOMER_ID") + ")"; - } - - protected String getCreateOrderDetails() { - return "CREATE TABLE ORDERDETAILS (" + getIntegerColumn("ORDERID") + " NOT NULL, " - + getIntegerColumn("PRODUCTID") - + " NOT NULL, PRICE FLOAT, PRIMARY KEY (ORDERID, PRODUCTID))"; - } - - protected String getCreateItem() { - return "CREATE TABLE ITEM (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " - + getStringColumn("NAME", 30) + ")"; - } - - protected String getCreateCompany() { - return "CREATE TABLE COMPANY (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL " - + getGeneratedKeyClause() + " , " - + getStringColumn("NAME", 30) + ", " + getIntegerColumn("EOTMID") + ")"; - } - - protected String getCreateEmployee() { - return "CREATE TABLE EMPLOYEE (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL " - + getGeneratedKeyClause() + "," - + getStringColumn("NAME", 30) + "," + getStringColumn("SN", 10) + ", MANAGER SMALLINT, " - + getIntegerColumn("DEPARTMENTID") + ")"; - } - - protected String getCreateDepartment() { - return "CREATE TABLE DEPARTMENT (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL " - + getGeneratedKeyClause() + ", " - + getStringColumn("NAME", 30) + "," + getStringColumn("LOCATION", 30) + ", " - + getStringColumn("DEPNUMBER", 10) + "," - + getIntegerColumn("COMPANYID") + ")"; - } - - protected String getCreateBook() { - return "CREATE TABLE BOOK (" + getIntegerColumn("BOOK_ID") + " PRIMARY KEY NOT NULL, " - + getStringColumn("NAME", 50) + "," - + getStringColumn("AUTHOR", 30) + ", " + getIntegerColumn("QUANTITY") + "," - + getIntegerColumn("OCC") + ")"; - } - - protected String getCreatePart() { - return "CREATE TABLE PART (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, NAME VARCHAR(50), " - + getIntegerColumn("QUANTITY") + "," - + getIntegerColumn("PARENT_ID") + " )"; - } - - protected String getCreateTypeTest() { - return "CREATE TABLE TYPETEST (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " - + getTimestampColumn("ATIMESTAMP") + "," - + getDecimalColumn("ADECIMAL", 9, 2) + "," + getFloatColumn("AFLOAT") + ")"; - } - - protected String getCreateStates() { - return "CREATE TABLE STATES (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " - + getStringColumn("NAME", 2) + ")"; - } - - protected String getCreateCities() { - return "CREATE TABLE CITIES (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL," - + getStringColumn("NAME", 50) + "," - + getIntegerColumn("STATE_ID") + "," + getForeignKeyConstraint("STATES", "ID", "STATE_ID") + ")"; - } - - protected String getCreateServerStatus() { - - return "CREATE TABLE CONMGT.SERVERSTATUS (STATUSID INTEGER PRIMARY KEY NOT NULL " + getGeneratedKeyClause() - + " (START WITH 1 ,INCREMENT BY 1), MANAGEDSERVERID INTEGER NOT NULL, TIMESTAMP TIMESTAMP NOT NULL)"; - - } - - // Dog Kennel Schema - - protected String getCreateDog() { - return "CREATE TABLE DOG (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , " - + getIntegerColumn("OWNER_ID") + " , " - + getStringColumn("NAME", 20) + ", " + getStringColumn("BREED", 20) + ", " - + getIntegerColumn("OCC_COUNT") + ", " - + "PRIMARY KEY(ID))"; - } - - protected String getCreateOwner() { - return "CREATE TABLE OWNER (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , " - + getStringColumn("NAME", 20) + ", " - + getStringColumn("CONTACT_PHONE", 20) + ", " + getIntegerColumn("OCC_COUNT") + ", " - + "PRIMARY KEY(ID))"; - } - - protected String getCreateKennel() { - return "CREATE TABLE KENNEL (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() - + " , " + getIntegerColumn("KNUMBER") + ", " - + getStringColumn("KIND", 20) + ", " + getIntegerColumn("OCC_COUNT") + ", " + "PRIMARY KEY(ID))"; - } - - protected String getCreateVisit() { - return "CREATE TABLE VISIT (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , " - + getTimestampColumn("CHECK_IN") - + ", " + getTimestampColumn("CHECK_OUT") + ", " + getIntegerColumn("OCC_COUNT") + ", " - + "PRIMARY KEY(ID))"; - } - - // ///////////////// - - protected String getForeignKeyConstraint(String pkTable, String pkColumn, String foreignKey) { - StringBuffer buffer = new StringBuffer(); - buffer.append("CONSTRAINT FK1 FOREIGN KEY ("); - buffer.append(foreignKey); - buffer.append(") REFERENCES "); - buffer.append(pkTable); - buffer.append("("); - buffer.append(pkColumn); - buffer.append(") ON DELETE NO ACTION ON UPDATE NO ACTION"); - return buffer.toString(); - } - - protected String getStringColumn(String name, int length) { - return name + ' ' + stringType + "(" + Integer.valueOf(length).toString() + ")"; - } - - protected String getIntegerColumn(String name) { - return name + ' ' + integerType; - } - - protected String getGeneratedKeyClause() { - return "GENERATED ALWAYS AS IDENTITY"; - } - - protected String getDecimalColumn(String name, int size1, int size2) { - return name + ' ' + decimalType + "(" + Integer.valueOf(size1).toString() + ',' - + Integer.valueOf(size2).toString() + ")"; - } - - protected String getFloatColumn(String name) { - return name + ' ' + floatType; - } - - protected String getTimestampColumn(String name) { - return name + ' ' + timestampType; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java deleted file mode 100644 index 300f315465..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java deleted file mode 100644 index 71a7d1c4e4..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 final class JavaStoredProcs { - - private JavaStoredProcs() { - - } - - public static void getAllCustomersAndAllOrders(ResultSet[] result1, ResultSet[] result2) throws SQLException { - Connection conn = DriverManager.getConnection("jdbc:default:connection"); - PreparedStatement ps = conn.prepareStatement("SELECT * FROM CUSTOMER"); - - result1[0] = ps.executeQuery(); - - PreparedStatement ps2 = conn.prepareStatement("select * from anorder"); - result2[0] = ps2.executeQuery(); - - } - - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java deleted file mode 100644 index 5b1a205523..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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); - - } 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), EOTMID INT)"; - } - - 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)"; - } - - protected String getCreateServerStatus() { - return "CREATE TABLE CONMGT.SERVERSTATUS (STATUSID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, " - + "MANAGEDSERVERID INTEGER NOT NULL, TIMESTAMP TIMESTAMP NOT NULL)"; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java deleted file mode 100644 index 094fe13456..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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; - - protected Connection connection; - - private int currentRow = -1; - - 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; - return currentRow < numberOfRows(); - } - - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java deleted file mode 100644 index ca1eaf7f37..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 java.sql.Timestamp; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -public abstract class TestData { - - protected static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:ss:mm.SSS"); - - protected static final Timestamp TIMESTAMP = getTimestamp(); - - protected Object[][] data; - - protected Connection connection; - - private int currentRow = -1; - - - 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; - return currentRow < numberOfRows(); - } - - 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(); - ps.close(); - } - - 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(); - } - ps.close(); - } - - // Utilities - protected static Date getDate() { - - try { - return DATE_FORMAT.parse("1966-12-20 00:00:00.0"); - } catch (ParseException e) { - throw new RuntimeException(e); - } - } - - protected static Date getDate(String timeStamp) { - - try { - return DATE_FORMAT.parse("1966-12-20 00:00:00.0"); - } catch (ParseException e) { - throw new RuntimeException(e); - } - } - - public static Timestamp getTimestamp() { - return new Timestamp(getDate().getTime()); - } - - public static Timestamp getTimestamp(String timeStamp) { - return new Timestamp(getDate(timeStamp).getTime()); - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java deleted file mode 100644 index c2ddb27ffd..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.log4j.Logger; -import org.apache.tuscany.das.rdb.util.LoggerFactory; - -public abstract class TestDataWithExplicitColumns extends TestData { - - private String[] columns; - - private int[] sqlTypes; - - private final Logger logger = LoggerFactory.INSTANCE.getLogger(TestDataWithExplicitColumns.class); - - 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("?)"); - - if (this.logger.isDebugEnabled()) { - this.logger.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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java deleted file mode 100644 index 835a2f5e77..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 Integer.valueOf(1); - } - return Integer.valueOf(0); - } - - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java deleted file mode 100644 index df9d2978eb..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 { - - private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd"); - - private static Date kbday; - - private static Date tbday; - - public SillyDateStringConverter() { - super(); - } - - 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java deleted file mode 100644 index 2be6522fcc..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java deleted file mode 100644 index a15cef37e6..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java deleted file mode 100644 index 806e152c24..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 junit.framework.Test; -import junit.framework.TestSuite; - -import org.apache.tuscany.das.rdb.test.AliasTests; -import org.apache.tuscany.das.rdb.test.BestPracticeTests; -import org.apache.tuscany.das.rdb.test.CUDGeneration; -import org.apache.tuscany.das.rdb.test.CommandGroupTests; -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.ImpliedRelationshipTests; -import org.apache.tuscany.das.rdb.test.KennelTests; -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.typed.SimplestStaticCrud; - -public final class AllCommonTests { - - private 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(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)); - suite.addTest(new TestSuite(AliasTests.class)); - - suite.addTest(new TestSuite(ImpliedRelationshipTests.class)); - - suite.addTest(new TestSuite(KennelTests.class)); - - //$JUnit-END$ - return suite; - } - -} diff --git a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java deleted file mode 100644 index ea8a2ddbaf..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 junit.framework.Test; -import junit.framework.TestSuite; - -import org.apache.tuscany.das.rdb.test.ReadDBSchemaTests; -import org.apache.tuscany.das.rdb.test.framework.DB2Setup; - -public final class AllTestsDB2 { - - private 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java deleted file mode 100644 index 0649fa815c..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 junit.framework.Test; -import junit.framework.TestSuite; - -import org.apache.tuscany.das.rdb.test.framework.DerbySetup; - -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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java deleted file mode 100644 index e68aaad8aa..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 junit.framework.Test; -import junit.framework.TestSuite; - -import org.apache.tuscany.das.rdb.test.framework.MySQLSetup; - -public final class AllTestsMySQL { - - private 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/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java b/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java deleted file mode 100644 index 96d851b5dc..0000000000 --- a/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.DAS; -import org.apache.tuscany.das.rdb.test.customer.CustomerFactory; -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.DataObject; - -/** - */ -public class SimplestStaticCrud extends DasTest { - - protected void setUp() throws Exception { - super.setUp(); - new CustomerData(getAutoConnection()).refresh(); - } - - public void testRead() throws Exception { - InputStream mapping = getClass().getClassLoader().getResourceAsStream("basicStaticCustomer.xml"); - DAS das = DAS.FACTORY.createDAS(mapping, getConnection()); - SDOUtil.registerStaticTypes(CustomerFactory.class); - - Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = ?"); - select.setParameter(1, "Williams"); - - DataObject root = select.executeQuery(); - - Collection customers = root.getList("Customer"); - assertEquals(4, customers.size()); - } - -} diff --git a/branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml b/branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml deleted file mode 100644 index 2d80da8b1a..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - -
- - - - -
- - - - - -
- diff --git a/branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml b/branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml deleted file mode 100644 index 7771d18c11..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml b/branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml deleted file mode 100644 index a8ff03297b..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml b/branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml deleted file mode 100644 index f0a11c554d..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - -
- - - -
- - - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml b/branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml deleted file mode 100644 index 7de98dffbd..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - - - -
- diff --git a/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml b/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml deleted file mode 100644 index 8ba6ab3e92..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml b/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml deleted file mode 100644 index 638e70101f..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml b/branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml deleted file mode 100644 index 4d3a0c87d9..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml b/branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml deleted file mode 100644 index 187609c0a0..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - -
- - - - - - -
\ No newline at end of file diff --git a/branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml b/branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml deleted file mode 100644 index ef17c8d489..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - -
- - - - -
- - - - - -
- diff --git a/branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml b/branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml deleted file mode 100644 index 78eb967689..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml b/branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml deleted file mode 100644 index 040b28b71b..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - - - -
- diff --git a/branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml b/branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml deleted file mode 100644 index 971788329e..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - -
- - - -
- - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml b/branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml deleted file mode 100644 index a3477c9bf4..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml b/branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml deleted file mode 100644 index ae0d691902..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - -
- - - - - - - -
- - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml b/branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml deleted file mode 100644 index 7d81e363d7..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -
-
diff --git a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml b/branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml deleted file mode 100644 index 191f238515..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml b/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml deleted file mode 100644 index ae29ff8d93..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml b/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml deleted file mode 100644 index 36d2ece17b..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml b/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml deleted file mode 100644 index e610549909..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml b/branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml deleted file mode 100644 index 68d842e630..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - -
- - - -
- - - - - -
- diff --git a/branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml b/branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml deleted file mode 100644 index 2706687161..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/cityStates.xml b/branches/das-java-M2/rdb/src/test/resources/cityStates.xml deleted file mode 100644 index 801828f960..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/cityStates.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - -
- - - - - - - -
- - - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/company.xsd b/branches/das-java-M2/rdb/src/test/resources/company.xsd deleted file mode 100644 index a7118ec808..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/company.xsd +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/branches/das-java-M2/rdb/src/test/resources/companyMapping.xml b/branches/das-java-M2/rdb/src/test/resources/companyMapping.xml deleted file mode 100644 index 795c36a783..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/companyMapping.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - -
- - - -
- - - -
- - - - - - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml b/branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml deleted file mode 100644 index 93bbea5130..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -
- - - - -
- - - - -
- - - - - - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/customer.xsd b/branches/das-java-M2/rdb/src/test/resources/customer.xsd deleted file mode 100644 index e5482ae3a0..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/customer.xsd +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/branches/das-java-M2/rdb/src/test/resources/customerMapping.xml b/branches/das-java-M2/rdb/src/test/resources/customerMapping.xml deleted file mode 100644 index 56f7c9d5b1..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/customerMapping.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - -
- -
diff --git a/branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml b/branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml deleted file mode 100644 index fb816c5628..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -
- - -
- - - - - -
- diff --git a/branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml b/branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml deleted file mode 100644 index b343d52b02..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - diff --git a/branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml b/branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml deleted file mode 100644 index 169e9e2f8e..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - diff --git a/branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml b/branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml deleted file mode 100644 index 81c9628da1..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - -
- - - -
- - - - - -
diff --git a/branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml b/branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml deleted file mode 100644 index 6b76ae3309..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - diff --git a/branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml b/branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml deleted file mode 100644 index 04744dfbb9..0000000000 --- a/branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - diff --git a/branches/das-java-M2/samples/build.xml b/branches/das-java-M2/samples/build.xml deleted file mode 100644 index f78ca9a3c8..0000000000 --- a/branches/das-java-M2/samples/build.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - diff --git a/branches/das-java-M2/samples/companyweb/build.xml b/branches/das-java-M2/samples/companyweb/build.xml deleted file mode 100644 index dd269b628e..0000000000 --- a/branches/das-java-M2/samples/companyweb/build.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/branches/das-java-M2/samples/companyweb/dastest/db.lck b/branches/das-java-M2/samples/companyweb/dastest/db.lck deleted file mode 100644 index 9f6b4b3d4b..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/db.lck and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl b/branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl deleted file mode 100644 index edbd775299..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/log/log1.dat b/branches/das-java-M2/samples/companyweb/dastest/log/log1.dat deleted file mode 100644 index 7e85ac8e8f..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/log/log1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl b/branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl deleted file mode 100644 index edbd775299..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat deleted file mode 100644 index 5d8ecaa10f..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat deleted file mode 100644 index 0f79fa7574..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat deleted file mode 100644 index 39d49e3d19..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat deleted file mode 100644 index 2a4311779b..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat deleted file mode 100644 index 64e3c18d62..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat deleted file mode 100644 index 0632d04164..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat deleted file mode 100644 index d7541026f6..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat deleted file mode 100644 index 6673bf1873..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat deleted file mode 100644 index c2a753cc5d..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat deleted file mode 100644 index cb9391aed1..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat deleted file mode 100644 index d3cf1d6364..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat deleted file mode 100644 index a7a2d536e9..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat deleted file mode 100644 index 19097e69e7..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat deleted file mode 100644 index 359525a31a..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat deleted file mode 100644 index 9f257df932..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat deleted file mode 100644 index e43e52fb7f..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat deleted file mode 100644 index 7e6ee3b1e0..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat deleted file mode 100644 index 1be6390f06..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat deleted file mode 100644 index b15d56855c..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat deleted file mode 100644 index 84b0022312..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat deleted file mode 100644 index 63106a9523..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat deleted file mode 100644 index 9975f27c1f..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat deleted file mode 100644 index 835c645a16..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat deleted file mode 100644 index d3d6adf4fb..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat deleted file mode 100644 index 8d7333df7d..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat deleted file mode 100644 index af722f7d73..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat deleted file mode 100644 index 3972983c2e..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat deleted file mode 100644 index 31577b8124..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat deleted file mode 100644 index 0f700d13a7..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat deleted file mode 100644 index 1d6382fb3d..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat deleted file mode 100644 index 3bc60d886b..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat deleted file mode 100644 index c542d3c91c..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat deleted file mode 100644 index 16abd20b5f..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat deleted file mode 100644 index eb26be5932..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat deleted file mode 100644 index 1214f1df4b..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat deleted file mode 100644 index 18c16f1123..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat deleted file mode 100644 index 926cbf25b5..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat deleted file mode 100644 index 07e7bc023c..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat deleted file mode 100644 index fd827f9dc2..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat deleted file mode 100644 index ca70319886..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat deleted file mode 100644 index 8fbe2a527c..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat deleted file mode 100644 index dcf9c746e1..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat deleted file mode 100644 index 6f21a840ea..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat deleted file mode 100644 index b512e8065f..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat deleted file mode 100644 index 27006e95a1..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat deleted file mode 100644 index 565dca97ac..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat deleted file mode 100644 index 36894c9818..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat deleted file mode 100644 index d0c538aede..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat deleted file mode 100644 index 65bcec5527..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat deleted file mode 100644 index bdab359420..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat deleted file mode 100644 index dc2d278b57..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat deleted file mode 100644 index 3072709cec..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat deleted file mode 100644 index 61086690f2..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat deleted file mode 100644 index ca551d8249..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat deleted file mode 100644 index f04de0840e..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat deleted file mode 100644 index 398b1672cc..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat deleted file mode 100644 index af259d0872..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat deleted file mode 100644 index 772a18c658..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat deleted file mode 100644 index 505428362d..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat deleted file mode 100644 index 484d0df42d..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat deleted file mode 100644 index faac073076..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat deleted file mode 100644 index 7585319d21..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat deleted file mode 100644 index 4fe8b786e3..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat deleted file mode 100644 index 7fc7937b15..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat deleted file mode 100644 index d1fb08c946..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat deleted file mode 100644 index d4c2090a3b..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat deleted file mode 100644 index 38b6ea6520..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat deleted file mode 100644 index a607a5969c..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat deleted file mode 100644 index 19b4c9e340..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat deleted file mode 100644 index 73dc986572..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat deleted file mode 100644 index d1eef3bb56..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat deleted file mode 100644 index c7e6db3ef7..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat deleted file mode 100644 index 8fd3bf17a8..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat b/branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat deleted file mode 100644 index 332b3d9a8a..0000000000 Binary files a/branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat and /dev/null differ diff --git a/branches/das-java-M2/samples/companyweb/dastest/service.properties b/branches/das-java-M2/samples/companyweb/dastest/service.properties deleted file mode 100644 index 8cfe3b09a5..0000000000 --- a/branches/das-java-M2/samples/companyweb/dastest/service.properties +++ /dev/null @@ -1,22 +0,0 @@ -#C:\apacheSVN\java\target\dastest -# ******************************************************************** -# *** Please do NOT edit this file. *** -# *** CHANGING THE CONTENT OF THIS FILE MAY CAUSE DATA CORRUPTION. *** -# ******************************************************************** -#Fri Feb 17 08:55:29 MST 2006 -SysschemasIndex2Identifier=225 -SyscolumnsIdentifier=144 -SysconglomeratesIndex1Identifier=49 -SysconglomeratesIdentifier=32 -SyscolumnsIndex2Identifier=177 -SysschemasIndex1Identifier=209 -SysconglomeratesIndex3Identifier=81 -SystablesIndex2Identifier=129 -SyscolumnsIndex1Identifier=161 -derby.serviceProtocol=org.apache.derby.database.Database -SysschemasIdentifier=192 -derby.storage.propertiesId=16 -SysconglomeratesIndex2Identifier=65 -derby.serviceLocale=en_US -SystablesIdentifier=96 -SystablesIndex1Identifier=113 diff --git a/branches/das-java-M2/samples/companyweb/pom.xml b/branches/das-java-M2/samples/companyweb/pom.xml deleted file mode 100644 index cfa8171171..0000000000 --- a/branches/das-java-M2/samples/companyweb/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - org.apache.tuscany.das.samples - tuscany-samples-das - 1.0-incubator-M2-SNAPSHOT - - - 4.0.0 - sample-companyweb - war - Tuscany DAS Company Sample - Sample use of RDB DAS in a Web application - - - - - org.apache.tuscany.das - tuscany-das-rdb - ${pom.version} - compile - - - - - - - src/main/java - - - src/main/java - - - src/main/resources - - - - diff --git a/branches/das-java-M2/samples/companyweb/readme.htm b/branches/das-java-M2/samples/companyweb/readme.htm deleted file mode 100644 index 4af782ff8d..0000000000 --- a/branches/das-java-M2/samples/companyweb/readme.htm +++ /dev/null @@ -1,654 +0,0 @@ - - - - - - - - -Tuscany RDB DAS Sample - - - - - - - - - - -

- -

Tuscany RDB DAS Sample (companyweb)

- -

 

- -

This stand-alone sample demonstrates the SDO RDB Data Access -Service in the context of a simple web application.

- -

 

- -

The application starts with a canned database of Companies -and their related Departments.  Through -the web page interface, a user can:

- -

 

- -
    -
  1. Display - all Companies in the database
  2. -
  3. Display - all Companies and related Departments
  4. -
  5. Add a - new Department to a Company
  6. -
  7. Delete - all Departments from a Company
  8. -
  9. Change - the names of Departments in a Company
  10. -
- -

 

- -

So, this simple application covers all CRUD operations as -well as the some relationship manipulation (adding a Department associates that -Department with the Company).  The sample -runs on Tomcat 5.5 and employs a Derby -database accessed via a DataSource.

- -

Running the sample

- -

There are two options for running this sample:

- -

 

- -
    -
  1. Run - from Tomcat configured by the build
  2. -
  3. Deploying - the CompanyWeb WAR into a Tomcat you configure - yourself
  4. -
- -

Running from Tomcat configured by the build

- -

This sample application is deployed (along with the canned -test database) to an instance of Tomcat as part of our automated sample -testing.  This means you can run the -java/das/samples/testing/tomcat build (see -java/das/samples/testing/tomcat/readme.htm )  and then access the application by pointing -your browser to http://localhost:8080/sample-companyweb/. 

- -

Deploying the CompanyWeb WAR into a Tomcat you -configure yourself

- -

Alternatively, you can deploy the sample to your own -configured Tomcat installation by following the instructions below.  These instructions assume that you have either -1) downloaded the Tuscany sample distribution or 2) Downloaded the Tuscany -source and run our maven build, see the following link to more details steps on -how to build DAS Sample applications http://incubator.apache.org/tuscany/java_das_overview.html -.

- -

Set Up

- -
    -
  1. Download - and install the most recent stable version of Tomcat 5.5.  You can find it here: http://tomcat.apache.org/download-55.cgi
  2. -
  3. Download - the most recent official release of Derby - from here: http://db.apache.org/derby/index.html.  The only file you’ll need from this - download is derby.jar
  4. -
  5. Stop - Tomcat
  6. -
  7. Copy derby.jar (from the derby distribution) to {Tomcat_Home}/common/lib:
  8. -
  9. Add - the sample war file to {Tomcat_Home}/webapps
  10. -
      -
    1. sample-companyweb-xxx.war (e.g. - “sample-companyweb-1.0-incubator-M2.war”)
    2. -
    -
  11. Install - the canned Derby database to - Tomcat:
  12. -
      -
    1. First, - create a new directory named “Databases” to hold the sample database.  Create {Tomcat_Home}/Databases
    2. -
    3. Copy - the dastest folder (and all its contents) from - {build directory root OR where samples where unzipped}/java/das/samples/companyweb to {Tomcat_Home}/Databases.  
      -
      - NOTE: If you are running this - from a sample distribution, the canned database is available in the - distribution, inside the databases directory.
    4. -
    -
- -

 

- -
    -
  1. Define - a DataSource by adding a datasource definition - to {Tomcat_Home}/conf/server.xml.
  2. -
      -
    1. Find - the end-of-section marker </GlobalNamingResources> - and add the following lines just above it:
    2. -
    -
- -

 

- -
        <!-- Global Datasource for Derby dastest database -->
         <Resource name="jdbc/dastest"
              type="javax.sql.DataSource"  auth="Container"
              description="Derby database for DAS Company sample"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="" password="" 
              driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
              url="jdbc:derby:{absolute path}Databases/dastest"/>
- -

 

- -

 Requirement: -You must include the absolute path to the “Databases” directory in the above url attribute.  Fore example:

- -

 

- -
         url="jdbc:derby:c:\apache-tomcat-5.5.17\Databases/dastest"/>
- -

 

- -
    -
  1. Start - tomcat and point your browser to: http://localhost:8080/sample-companyweb-{version - tag}/
  2. -
- -

 

- -

example: http://localhost:8080/sample-companyweb-1.0-incubator-M2/

- -

 

- -

Sample Architecture

- -

This is a simple, single-page, web application.  The main components of this application are:

- -
    -
  • The - RDB Data Access Service (DAS)
  • -
  • SDO
  • -
  • CompanyClient.java
  • -
  • Company.jsp
  • -
  • The - canned Derby database
  • -
- -

 

- -

 

- -

The CompanyClient -uses the DAS directly and provides -high-level services to the jsp such as:

- -

public -final List getCompanies()

- -

This is a good place to look for how you might use the DAS -in your own application.

- -

 

- -

The Company.jsp -responds to client interaction by invoking services of the CompanyClient.  It receives data from the CompanyClient -as SDO data graphs and manipulates SDOs directly to display data.

- -

 

- -

The canned Derby -database comes preloaded with Companies and related Departments.  The Derby -database instance is a simple file folder.

- -

 

- -

The DAS accepts -directives (commands) from the CompanyClient and -reads and writes to the derby database instance appropriately.

- -
- - - - - diff --git a/branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java b/branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java deleted file mode 100644 index d0519ecc08..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.samples.das.companyweb; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Random; - -import org.apache.tuscany.das.rdb.Command; -import org.apache.tuscany.das.rdb.DAS; - -import commonj.sdo.DataObject; - -public class CompanyClient { - - private Random generator = new Random(); - - private DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml")); - - public final List getCompanies() { - - Command read = das.getCommand("all companies"); - DataObject root = read.executeQuery(); - return root.getList("COMPANY"); - - } - - public final List getCompaniesWithDepartments() { - - Command read = das.getCommand("all companies and departments"); - DataObject root = read.executeQuery(); - return root.getList("COMPANY"); - } - - public final List getDepartmentsForCompany(int id) { - Command read = das.getCommand("all departments for company"); - read.setParameter(1, new Integer(id)); - DataObject root = read.executeQuery(); - return root.getList("COMPANY"); - } - - public final void addDepartmentToFirstCompany() { - Command read = das.getCommand("all companies and departments"); - DataObject root = read.executeQuery(); - DataObject firstCustomer = root.getDataObject("COMPANY[1]"); - - DataObject newDepartment = root.createDataObject("DEPARTMENT"); - newDepartment.setString("NAME", "Default Name"); - firstCustomer.getList("departments").add(newDepartment); - - das.applyChanges(root); - - } - - public final void deleteDepartmentsFromFirstCompany() { - - // This section gets the ID of the first Company just so I can - // demonstrate a parameterized command next - Command readAll = das.getCommand("all companies and departments"); - DataObject root = readAll.executeQuery(); - int idOfFirstCustomer = root.getInt("COMPANY[1]/ID"); - System.out.println("ID of first company is: " + idOfFirstCustomer); - - // Read a specific company based on the known ID - Command readCust = das.getCommand("company by id with departments"); - readCust.setParameter(1, new Integer(idOfFirstCustomer)); - root = readCust.executeQuery(); - - // Delete all the comany's departments from the graph - DataObject firstCustomer = root.getDataObject("COMPANY[1]"); - - // Shallow copy of list for deleting. This is required to avoid the - // dreaded - // ConcurrentModificationException since #delete operation also removes - // from the original list - List allDepartments = new ArrayList(firstCustomer.getList("departments")); - - Iterator i = allDepartments.iterator(); - DataObject department; - while (i.hasNext()) { - department = (DataObject) i.next(); - System.out.println("Deleting department named: " + department.getString("NAME")); - department.delete(); - } - - das.applyChanges(root); - - } - - public final void changeFirstCompanysDepartmentNames() { - - // This section gets the ID of the first Company just so I can - // demonstrate a parameterized command next - Command readAll = das.getCommand("all companies and departments"); - DataObject root = readAll.executeQuery(); - int idOfFirstCustomer = root.getInt("COMPANY[1]/ID"); - System.out.println("ID of first company is: " + idOfFirstCustomer); - - // Read a specific company based on the known ID - Command readCust = das.getCommand("company by id with departments"); - readCust.setParameter(1, new Integer(idOfFirstCustomer)); - root = readCust.executeQuery(); - - // Modify all the comany's department names - DataObject firstCustomer = root.getDataObject("COMPANY[1]"); - Iterator i = firstCustomer.getList("departments").iterator(); - DataObject department; - while (i.hasNext()) { - department = (DataObject) i.next(); - System.out.println("Modifying department: " + department.getString("NAME")); - department.setString("NAME", getRandomDepartmentName()); - } - das.applyChanges(root); - - } - - - public void releaseResources() { - das.releaseResources(); - } - - // Utilities - - private String getRandomDepartmentName() { - int number = generator.nextInt(1000) + 1; - return "Dept-" + number; - } - - private InputStream getConfig(String fileName) { - return getClass().getClassLoader().getResourceAsStream(fileName); - } - -} diff --git a/branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml b/branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml deleted file mode 100644 index 1992ab02cd..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - -
- - - -
- - - - - - -
diff --git a/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt b/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt deleted file mode 100644 index d645695673..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - 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. diff --git a/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE b/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE deleted file mode 100644 index f1aa4f1921..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE +++ /dev/null @@ -1,32 +0,0 @@ -Apache Tuscany DAS for Java -Copyright 2006 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), -sponsored by the Apache 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. - -Unless otherwise indicated, all distribution made available by the Apache Software Foundation -is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). -A copy of the AL is provided with this distribution as the LICENSE.txt file present in the -root directory, and is also available at http://www.apache.org/licenses/. - -The terms and conditions governing the distribution may refer to the AL or other license -agreements, notices or terms and conditions. Some of these other license agreements may -include (but are not limited to): - - . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) - . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) - -This product also includes software developed by: -- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) - -It is your obligation to read and accept all such terms and conditions prior to use of the -distribution. If term or condition is provided, please contact the Apache Software Foundation -to determine what terms and conditions govern that particular distribution. diff --git a/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt b/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt deleted file mode 100644 index 107de8c3ca..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt +++ /dev/null @@ -1,35 +0,0 @@ -Apache Tuscany M2 build (October, 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/branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties b/branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties deleted file mode 100644 index 5c49df303c..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# -# Set root logger level to DEBUG and its only appender to A1. -log4j.rootLogger=INFO, A1 - -# A1 is set to be a ConsoleAppender. -log4j.appender.A1=org.apache.log4j.ConsoleAppender - -# A1 uses PatternLayout. -log4j.appender.A1.layout=org.apache.log4j.PatternLayout -log4j.appender.A1.layout.ConversionPattern=[DAS RDB] - %c{1}.%M (%L) : %m %n - -# Print only messages of level WARN or above in the package com.foo. -log4j.logger.org.apache.tuscany=NONE \ No newline at end of file diff --git a/branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp b/branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp deleted file mode 100644 index 58db88c623..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp +++ /dev/null @@ -1,158 +0,0 @@ - - - - -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - - pageEncoding="ISO-8859-1" - - import="org.apache.tuscany.samples.das.companyweb.CompanyClient" - import="commonj.sdo.*" -%> - - -Company Test - - - -

Tuscany DAS Companies WEB Example

- - -
- - - - - -
- - -<%if(request.getParameter("doFill") != null){%> - - - - - - - - - - - <% - CompanyClient companyClient = new CompanyClient(); - java.util.Iterator i = companyClient.getCompaniesWithDepartments().iterator(); - while (i.hasNext()) { - DataObject company = (DataObject)i.next(); - %> - - - - - <% - } - companyClient.releaseResources(); - %> - - -
IDName
<%=company.getInt("ID")%><%=company.getString("NAME")%>
-<%}%> - - - -<% -if(request.getParameter("doAddDepartment") != null){ - CompanyClient companyClient = new CompanyClient(); - companyClient.addDepartmentToFirstCompany(); - companyClient.releaseResources(); -} -%> - - -<% -if(request.getParameter("doDeleteDepartments") != null){ - CompanyClient companyClient = new CompanyClient(); - companyClient.deleteDepartmentsFromFirstCompany(); - companyClient.releaseResources(); -} -%> - - -<% -if(request.getParameter("doChangeDepartmentNames") != null){ - CompanyClient companyClient = new CompanyClient(); - companyClient.changeFirstCompanysDepartmentNames(); - companyClient.releaseResources(); -} -%> - - - -<%if(request.getParameter("doFill") == null) {%> - - - - - - - - - - - - - <% - CompanyClient companyClient = new CompanyClient(); - java.util.Iterator i = companyClient.getCompaniesWithDepartments().iterator(); - while (i.hasNext()) { - DataObject company = (DataObject)i.next(); - %> - - - - - - - - <% - java.util.Iterator j = company.getList("departments").iterator(); - while (j.hasNext()) { - DataObject department = (DataObject)j.next(); - %> - - - - - <% - } - %> - <% - } - companyClient.releaseResources(); - %> - - -
IDNameDepartment_IDDepartment_Name
<%=company.getInt("ID")%><%=company.getString("NAME")%>
<%=department.getInt("ID")%><%=department.getString("NAME")%>
-<%}%> - - - -
- - diff --git a/branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml b/branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml deleted file mode 100644 index 5f0af32dd5..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml b/branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index dc7e488fef..0000000000 --- a/branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Tuscany DAS sample Company WEB - - - Company.jsp - - - diff --git a/branches/das-java-M2/samples/pom.xml b/branches/das-java-M2/samples/pom.xml deleted file mode 100644 index ff1edb39d6..0000000000 --- a/branches/das-java-M2/samples/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - 4.0.0 - - org.apache.tuscany.das - tuscany-das - 1.0-incubator-M2-SNAPSHOT - - - org.apache.tuscany.das.samples - tuscany-samples-das - pom - Tuscany DAS Samples - - - companyweb - - diff --git a/branches/das-java-M2/samples/testing/tomcat/build.xml b/branches/das-java-M2/samples/testing/tomcat/build.xml deleted file mode 100644 index af159f940a..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/build.xml +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml b/branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml deleted file mode 100644 index 0aa3cf857a..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - org.apache.tuscany.das.samples - tuscany-samples-das-testing-tomcat - 1.0-incubator-M2-SNAPSHOT - - - 4.0.0 - tuscany-samples-das-testing-tomcatcompanyweb - jar - Tuscany Testing DAS Sample - Companyweb - Testing Tomcat DAS end user test - - - - - junit - junit - 3.8.1 - test - - - htmlunit - htmlunit - 1.9 - test - - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - jakarta-regexp - jakarta-regexp - 1.4 - - - ant - ant-jakarta-regexp - 1.6.1 - - - ant - ant-xslp - 1.6.5 - - - ant - ant-trax - 1.6.5 - - - - - - diff --git a/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/LICENSE.txt b/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/LICENSE.txt deleted file mode 100644 index 25d78feeac..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/LICENSE.txt +++ /dev/null @@ -1,1277 +0,0 @@ - - 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/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/NOTICE b/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/NOTICE deleted file mode 100644 index d48810c0ec..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/NOTICE +++ /dev/null @@ -1,18 +0,0 @@ -========================================================================= -== 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/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/README.txt b/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/README.txt deleted file mode 100644 index 9b26d1690a..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/README.txt +++ /dev/null @@ -1,35 +0,0 @@ -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/branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java b/branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java deleted file mode 100644 index d2f3e22b83..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.test.das; - -import java.net.URL; - -import junit.framework.TestCase; - -import com.gargoylesoftware.htmlunit.WebClient; -import com.gargoylesoftware.htmlunit.html.HtmlForm; -import com.gargoylesoftware.htmlunit.html.HtmlPage; -import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; - -public class DasTestCase extends TestCase { - public static final String testUrl = "http://localhost:8080/sample-companyweb/"; - - protected WebClient _webClient; - protected URL _url; - - protected void setUp() throws Exception { - //New HTMLunit web client - _webClient = new WebClient(); - _webClient.setRedirectEnabled(true); - - // Going to have the WebClient connect to this URL - _url = new URL(testUrl); - - } - - public void testHomepage() throws Exception { - final String TEST_CASE = "HomePage"; - System.out.print("Running:" + TEST_CASE + "\t\t\t"); - - final HtmlPage page = (HtmlPage) _webClient.getPage(_url); - //System.out.println(page.getTitleText()); - - String responseText = page.asText(); - //System.out.println("html-->\n" + responseText); - //check page header - assertTrue(-1 != responseText.indexOf("Tuscany DAS Companies WEB Example")); - //check table headers - assertTrue(-1 != responseText.indexOf("ID")); - assertTrue(-1 != responseText.indexOf("Name")); - assertTrue(-1 != responseText.indexOf("Department_ID")); - assertTrue(-1 != responseText.indexOf("Department_Name")); - //check companies values - assertTrue(-1 != responseText.indexOf("51")); - assertTrue(-1 != responseText.indexOf("ACME Publishing")); - assertTrue(-1 != responseText.indexOf("53")); - assertTrue(-1 != responseText.indexOf("Do-rite plumbing")); - assertTrue(-1 != responseText.indexOf("53")); - assertTrue(-1 != responseText.indexOf("MegaCorp")); - //check departments - assertTrue(-1 != responseText.indexOf("73")); - assertTrue(-1 != responseText.indexOf("74")); - assertTrue(-1 != responseText.indexOf("75")); - assertTrue(-1 != responseText.indexOf("76")); - assertTrue(-1 != responseText.indexOf("77")); - assertTrue(-1 != responseText.indexOf("78")); - assertTrue(-1 != responseText.indexOf("12")); - - System.out.println("SUCCESS!!!"); - } - - - public void testAllCompanies() throws Exception{ - final String TEST_CASE = "AllCompanies"; - System.out.print("Running:" + TEST_CASE + "\t\t\t"); - - // Get the first page - final HtmlPage page = (HtmlPage) _webClient.getPage(_url); - - // Get the form that we are dealing with and within that form, - // find the submit button and the field that we want to change. - final HtmlForm form = (HtmlForm) page.getForms().get(0); - final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doFill"); - // Now submit the form by clicking the button - final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); - - //verify the resultPage - String responseText = resultPage.asText(); - //System.out.println("html-->\n" + responseText); - // check table headers - assertTrue(-1 != responseText.indexOf("ID")); - assertTrue(-1 != responseText.indexOf("Name")); - //check table values - assertTrue(-1 != responseText.indexOf("51")); - assertTrue(-1 != responseText.indexOf("ACME Publishing")); - assertTrue(-1 != responseText.indexOf("52")); - assertTrue(-1 != responseText.indexOf("Do-rite plumbing")); - assertTrue(-1 != responseText.indexOf("53")); - assertTrue(-1 != responseText.indexOf("MegaCorp")); - - System.out.println("SUCCESS!!!"); - } - - public void testAllCompaniesDepartments() throws Exception{ - final String TEST_CASE = "AllCompaniesDepartments"; - System.out.print("Running:" + TEST_CASE + "\t\t"); - - // Get the first page - final HtmlPage page = (HtmlPage) _webClient.getPage(_url); - - // Get the form that we are dealing with and within that form, - // find the submit button and the field that we want to change. - final HtmlForm form = (HtmlForm) page.getForms().get(0); - final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doFillAll"); - // Now submit the form by clicking the button - final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); - - //verify the resultPage - String responseText = resultPage.asText(); - //System.out.println("html-->\n" + responseText); - //check table headers - assertTrue(-1 != responseText.indexOf("ID")); - assertTrue(-1 != responseText.indexOf("Name")); - assertTrue(-1 != responseText.indexOf("Department_ID")); - assertTrue(-1 != responseText.indexOf("Department_Name")); - //check companies values - assertTrue(-1 != responseText.indexOf("51")); - assertTrue(-1 != responseText.indexOf("ACME Publishing")); - assertTrue(-1 != responseText.indexOf("53")); - assertTrue(-1 != responseText.indexOf("Do-rite plumbing")); - assertTrue(-1 != responseText.indexOf("53")); - assertTrue(-1 != responseText.indexOf("MegaCorp")); - //check departments - assertTrue(-1 != responseText.indexOf("73")); - assertTrue(-1 != responseText.indexOf("74")); - assertTrue(-1 != responseText.indexOf("75")); - assertTrue(-1 != responseText.indexOf("76")); - assertTrue(-1 != responseText.indexOf("77")); - assertTrue(-1 != responseText.indexOf("78")); - assertTrue(-1 != responseText.indexOf("12")); - - System.out.println("SUCCESS!!!"); - } - - public void testAddDepartmentToFirstCompany() throws Exception{ - final String TEST_CASE = "AddDepartmentToFirstCompany"; - System.out.print("Running:" + TEST_CASE + "\t"); - - // Get the first page - final HtmlPage page = (HtmlPage) _webClient.getPage(_url); - - // Get the form that we are dealing with and within that form, - // find the submit button and the field that we want to change. - final HtmlForm form = (HtmlForm) page.getForms().get(0); - final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doAddDepartment"); - // Now submit the form by clicking the button - final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); - - //verify the resultPage - String responseText = resultPage.asText(); - //System.out.println("html-->\n" + responseText); - //check new department - assertTrue(-1 != responseText.indexOf("79")); - - System.out.println("SUCCESS!!!"); - } - - - public void testChangeCompanyDepartmentNames() throws Exception{ - final String TEST_CASE = "ChangeCompanyDepartmentNames"; - System.out.print("Running:" + TEST_CASE + "\t"); - - // Get the first page - final HtmlPage page = (HtmlPage) _webClient.getPage(_url); - - // Get the form that we are dealing with and within that form, - // find the submit button and the field that we want to change. - final HtmlForm form = (HtmlForm) page.getForms().get(0); - final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doChangeDepartmentNames"); - // Now submit the form by clicking the button - final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); - - //verify the resultPage - String responseText = resultPage.asText(); - //System.out.println("html-->\n" + responseText); - //check update departments - assertTrue(-1 != responseText.indexOf("Dept-")); - //also, check to not have old departments names (default name) - assertTrue(-1 == responseText.indexOf("Default Name")); - - System.out.println("SUCCESS!!!"); - } - - public void testDeleteCompanyOneDepartments() throws Exception{ - final String TEST_CASE = "DeleteCompanyOneDepartments"; - System.out.print("Running:" + TEST_CASE + "\t"); - - // Get the first page - final HtmlPage page = (HtmlPage) _webClient.getPage(_url); - - // Get the form that we are dealing with and within that form, - // find the submit button and the field that we want to change. - final HtmlForm form = (HtmlForm) page.getForms().get(0); - final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doDeleteDepartments"); - // Now submit the form by clicking the button - final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); - - //verify the resultPage - String responseText = resultPage.asText(); - //System.out.println("html-->\n" + responseText); - //check that al the company 1 departments are gone.. - assertTrue(-1 == responseText.indexOf("73")); - assertTrue(-1 == responseText.indexOf("74")); - assertTrue(-1 == responseText.indexOf("75")); - assertTrue(-1 == responseText.indexOf("76")); - assertTrue(-1 == responseText.indexOf("77")); - assertTrue(-1 == responseText.indexOf("78")); - - System.out.println("SUCCESS!!!"); - } - - /** - * @param args - */ - public static void main(String[] args) { - DasTestCase t = new DasTestCase(); - try{ - t.testHomepage(); - t.testAllCompanies(); - t.testAllCompaniesDepartments(); - t.testAddDepartmentToFirstCompany(); - t.testChangeCompanyDepartmentNames(); - t.testDeleteCompanyOneDepartments(); - }catch(Exception e){ - e.printStackTrace(); - } - - } - -} diff --git a/branches/das-java-M2/samples/testing/tomcat/context.xsl b/branches/das-java-M2/samples/testing/tomcat/context.xsl deleted file mode 100644 index 35a78a43a5..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/context.xsl +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/branches/das-java-M2/samples/testing/tomcat/datasource.xsl b/branches/das-java-M2/samples/testing/tomcat/datasource.xsl deleted file mode 100644 index ad473e317c..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/datasource.xsl +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - Global Datasource for Derby dastest database - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/branches/das-java-M2/samples/testing/tomcat/pom.xml b/branches/das-java-M2/samples/testing/tomcat/pom.xml deleted file mode 100644 index 8cc305e935..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/pom.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - org.apache.tuscany.das.samples - tuscany-samples-das - 1.0-incubator-M2-SNAPSHOT - - - - 4.0.0 - tuscany-samples-das-testing-tomcat - pom - Tuscany Testing in Tomcat - - - - companyweb - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*TestCase.java - - - - - - - - src/test/java - - **/*.componentType - - - - src/test/resources - - **/* - - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.1 - - - prepareTomcat - process-test-resources - - - - - - - - - - - - run - - - - - cleanupTomcat - clean - - - - - - - - - run - - - - - - - - - test - - diff --git a/branches/das-java-M2/samples/testing/tomcat/readme.htm b/branches/das-java-M2/samples/testing/tomcat/readme.htm deleted file mode 100644 index b47a9d24c5..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/readme.htm +++ /dev/null @@ -1,71 +0,0 @@ - - - - Tuscany End User Sample Testing - - -

Tuscany End User Sample Testing

-

Initial Setup

  -   Most of the following only needs to be done once -unless noted otherwise.
-
    -
  • Follow the steps to build Tuscany DAS Companyweb sample application from Tuscany DAS Java Overview.
  • - -
  • Change directory -to java/das/samples/testing/tomcat.
  • - -
  • Download -Tomcat Core 5.5.xx zip -for Windows or  tar.gz for Linux  from Apache -Tomcat.
  • - -
  • You can place the tomcat distribution in your java/samples/das/testing/tomcat directory or, alternatively, you can create/edit {user home}/build.properties to -change the property tuscany.acceptance.tomcat.zipped to tell the build -environment where the tomcat distribution zip file is located.
  • -
  • You may have to edit build.xml  to change the property tuscany.acceptance.tomcat.version -to match the xx -to the specific version that you downloaded.
  • -
- -

 Running

In -the java/das/samples/testing/tomcat -directory run maven:
mvn

Explanation

Maven does -the following:
  • Unpacks the -Tomcat distribution into the target directory to ensure a pristine -environment.
  • It adds the appropriate Tuscany and it -dependencies jars into Tomcat (for more  details)
  • Does -the necessary changes -to Tomcat's configuration as required. (for more  details)
  • Deploys -Tuscany's DAS sample war files into Tomcat.
  • Starts -Tomcat (You should see another window running Tomcat) 
  • Begins -running HTML unit tests that should closely match running the samples -as a user would.
If all goes well at the end you -should see:
-
[INFO] ----------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ----------------------------------------------------------------------------
[INFO] Tuscany Testing in Tomcat .............................. SUCCESS [0.340s]
[INFO] Tuscany Testing Tomcat DAS Sample - Companyweb ......... SUCCESS [48.350s]
[INFO] ----------------------------------------------------------------------------
[INFO] ----------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------------
[INFO] Total time: 49 seconds
[INFO] Finished at: Tue Aug 08 15:30:28 EDT 2006
[INFO] Final Memory: 7M/15M
[INFO] ----------------------------------------------------------------------------

Cleanup

Close -the Tomcat window and issue mvn clean.

Note

-

Because the html unit tests execute multiple user actions that change the contents of the database tables, is recommended -that you always run these tests in a clean environment (after a mvn clean), -otherwise you may experience failure on some tests as the expected result data might have been affected by previous test runs.

- - \ No newline at end of file diff --git a/branches/das-java-M2/samples/testing/tomcat/server.xsl b/branches/das-java-M2/samples/testing/tomcat/server.xsl deleted file mode 100644 index b53d1d50c7..0000000000 --- a/branches/das-java-M2/samples/testing/tomcat/server.xsl +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - org.apache.tuscany.tomcat.TuscanyHost - - - - - - - - diff --git a/das-java/branches/das-java-M2/BUILDING.txt b/das-java/branches/das-java-M2/BUILDING.txt new file mode 100644 index 0000000000..934e991641 --- /dev/null +++ b/das-java/branches/das-java-M2/BUILDING.txt @@ -0,0 +1,58 @@ +DAS Java Build Environment Setup + +For the most updated documentation on how to build Tuscany : + - http://incubator.apache.org/tuscany/java-projects.html + +For the most updated documentation on how to build DAs : + - http://incubator.apache.org/tuscany/java_das_overview.html + + + +Building DAS + + +1. Set up your environment using the instructions for building the whole of Tuscany (http://incubator.apache.org/tuscany/java-projects.html), +but only download and install Java 5, Maven and Svn + +2. Make sure 'mvn' and 'svn' commands are in your PATH environment variable. + +3. Check out the DAS open source projects from Apache. + + Commands: + + md + cd + md java + cd java + svn co https://svn.apache.org/repos/asf/incubator/tuscany/java/das das + cd das + svn up das + +4.Run "mvn" under /java/das directory to install POM files from the root project to the local repository + + + Commands: + + cd /java/das + mvn + + Notes: + 1.If the mvn command completed successfully, you will see BUILD SUCCESSFUL in the output and tuscany-das-rdb-1.0-SNAPSHOT.jar is created under /java/das/rdb/target directory. + 2.External resources are at times unavailable. It may be necessary to run "mvn" again at a later time. + 3.If you are taking time to reply to firewall prompts, this can cause some requests to time out. Set up the firewall to permit the action without prompting. + +Dependency Jars + + +The DAS.RDB project has a dependency on SDO and requires the following SDO runtime jars to build + + * sdo-api-r2.0.1-1.0-SNAPSHOT.jar - SDO 2.0 Interfaces + * tuscany-sdo-impl-1.0-SNAPSHOT.jar - SDO 2.0 implementation + +The SDO.IMPL project have dependencies on the following EMF (Eclipse Modeling Framework - www.eclipse.org/emf) runtime jars to build: + + * emf-common-2.2.0-SNAPSHOT.jar - some common framework utility and base classes + * emf-ecore-2.2.0-SNAPSHOT.jar - the EMF core runtime implementation classes (the Ecore metamodel) + * emf-ecore-change-2.2.0-SNAPSHOT.jar - the EMF change recorder and framework + * emf-ecore-xmi-2.2.0-SNAPSHOT.jar - EMF's default XML (and XMI) serializer and loader + * xsd-2.2.0-SNAPSHOT.jar - the XML Schema model diff --git a/das-java/branches/das-java-M2/LICENSE.txt b/das-java/branches/das-java-M2/LICENSE.txt new file mode 100644 index 0000000000..75b52484ea --- /dev/null +++ b/das-java/branches/das-java-M2/LICENSE.txt @@ -0,0 +1,202 @@ + + 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. diff --git a/das-java/branches/das-java-M2/NOTICE.txt b/das-java/branches/das-java-M2/NOTICE.txt new file mode 100644 index 0000000000..59f0b4314f --- /dev/null +++ b/das-java/branches/das-java-M2/NOTICE.txt @@ -0,0 +1,32 @@ +Apache Tuscany DAS for Java +Copyright 2006 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), +sponsored by the Apache 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. + +Unless otherwise indicated, all distribution made available by the Apache Software Foundation +is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). +A copy of the AL is provided with this distribution as the LICENSE.txt file present in the +root directory, and is also available at http://www.apache.org/licenses/. + +The terms and conditions governing the distribution may refer to the AL or other license +agreements, notices or terms and conditions. Some of these other license agreements may +include (but are not limited to): + + . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) + . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) + +This product also includes software developed by: +- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) + +It is your obligation to read and accept all such terms and conditions prior to use of the +distribution. If term or condition is provided, please contact the Apache Software Foundation +to determine what terms and conditions govern that particular distribution. diff --git a/das-java/branches/das-java-M2/README.txt b/das-java/branches/das-java-M2/README.txt new file mode 100644 index 0000000000..b2634b42ed --- /dev/null +++ b/das-java/branches/das-java-M2/README.txt @@ -0,0 +1,10 @@ + Apache Tuscany + ------------------------------------------- + +Welcome to Tuscany! Please read the release notes (RELEASE_NOTES.txt) in this directory for +details on the current release. + +Thanks from all of us on the Tuscany team for downloading the package; help +us make it better by sending comments to tuscany-user@ws.apache.org. + + diff --git a/das-java/branches/das-java-M2/RELEASE_NOTES.txt b/das-java/branches/das-java-M2/RELEASE_NOTES.txt new file mode 100644 index 0000000000..a116778476 --- /dev/null +++ b/das-java/branches/das-java-M2/RELEASE_NOTES.txt @@ -0,0 +1,53 @@ +What's new in DAS Java M2 + + DAS Core features + + - MySQL support + + - Static Data Objects + + - Dynamic root for static graphs + + - "Unique" attribute on relationships + + - Explicit ResultSet shape definition + + - Improved logging + + - Programmatic Configuration + + - Helper for empty SDO Graph + + - Convention over configuration + + - Column named "ID" is the PK + + - Column named "xxx_ID" is the FK to table "xxx" + + + DAS Samples + + - Tomcat integration and automated DAS samples testing (htmlUnit) + + - DAS Samples now have all dependencies and source code inside the sample war + + + For detailed user documentation and feature descriptions, access Tuscany DAS Wiki page + + http://wiki.apache.org/ws/Tuscany/TuscanyJava/DAS_Java_Overview + + Downloading + + http://incubator.apache.org/tuscany/downloads.html#Apache%20Tuscany%20Java%20Downloads + + +Details are described below. + + DAS Java M2 is a superset of previous DAS Java M1 release. + Anything in M1 is also in M2, but M2 contains features and bugfixes not present in M1 release. + +Compatibility Concerns + + - We have removed support for named parameters and previous DAS configuration files will have to be updated as needed. + + diff --git a/das-java/branches/das-java-M2/STATUS.txt b/das-java/branches/das-java-M2/STATUS.txt new file mode 100644 index 0000000000..24a37ea606 --- /dev/null +++ b/das-java/branches/das-java-M2/STATUS.txt @@ -0,0 +1,73 @@ +Apache Tuscany Status + +Tuscany provides multiple language implementations of the Service Component Architecture (SCA) specifications and related technologies such as SDO. + +PROJECT STATUS +============== + + Tuscany is being incubated at the request of the Apache Web Services PMC. + For information on incubation please visit the project page at + http://incubator.apache.org/projects/tuscany.html + +PENDING ISSUES +============== +XXXX-XX-XX CCLA received for IBM's contribution of a C++ implementation +XXXX-XX-XX CCLA received for BEA and IBM joint contribution of a Java implementation + +RESOLVED ISSUES SINCE LAST STATUS +================================= +None + +OTHER NEWS +========== + +2006-09-29 Vote to add Ignacio Silva-Lepe as a new committer +2006-09-18 Vote to add Venkata Krishnan as a new committer +2006-08-10 Vote to add Andrew Borley as a new committer +2006-08-07 Vote to add Meeraj Kunnumpurath as a new committer +2006-08-07 Vote to add Kelvin Goodson as a new committer +2006-08-06 Vote to add Brent Daniel as a new committer +2006-08-04 Vote to add Raymond Feng as a new committer +2006-08-01 C++ Milestone 1 release +2006-06-07 Java Milestone 1 release +2006-05-02 Vote to add Dan Kulp as a new committer + +2006-01-05 Contribution of Java implementation by BEA and IBM committed +2006-01-05 Contribution of C+ implementation by IBM committed + +RELEASE STATUS +============== +None + +REFERENCES +========== +Status file http://svn.apache.org/repos/asf/incubator/tuscany/STATUS +User List tuscany-user@ws.apache.org +Developer List tuscany-dev@ws.apache.org +Commits List tuscany-commits@ws.apache.org +Source Code http://svn.apache.org/repos/asf/incubator/tuscany/ +Issue Tracking http://issues.apache.org/jira/browse/TUSCANY + +Committers + ajborley Andrew Borley + antelder Ant Elder + bdaniel Brent Daniel + dkulp Dan Kulp + dims Davanum Srinivas + edslattery Ed Slattery + ekoneil Eddie O'Neil + frankb Frank Budinsky + geirm Geir Magnusson Jr + isilval Ignacio Silva-Lepe + jsdelfino Jean-Sebastien Delfino + jboynes Jeremy Boynes + jmarino Jim Marino + kelvingoodson Kelvin Goodson + kentam Ken Tam + kwilliams Kevin Williams + edwardsmj Mike Edwards + meerajk Meeraj Kunnumpurath + rfeng Raymond Feng + robbinspg Pete Robbins + rineholt Rick Rineholt + svkrish Venkata Krishnan diff --git a/das-java/branches/das-java-M2/distribution/binary/LICENSE.txt b/das-java/branches/das-java-M2/distribution/binary/LICENSE.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/binary/LICENSE.txt @@ -0,0 +1,202 @@ + + 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. diff --git a/das-java/branches/das-java-M2/distribution/binary/NOTICE.txt b/das-java/branches/das-java-M2/distribution/binary/NOTICE.txt new file mode 100644 index 0000000000..f1aa4f1921 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/binary/NOTICE.txt @@ -0,0 +1,32 @@ +Apache Tuscany DAS for Java +Copyright 2006 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), +sponsored by the Apache 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. + +Unless otherwise indicated, all distribution made available by the Apache Software Foundation +is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). +A copy of the AL is provided with this distribution as the LICENSE.txt file present in the +root directory, and is also available at http://www.apache.org/licenses/. + +The terms and conditions governing the distribution may refer to the AL or other license +agreements, notices or terms and conditions. Some of these other license agreements may +include (but are not limited to): + + . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) + . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) + +This product also includes software developed by: +- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) + +It is your obligation to read and accept all such terms and conditions prior to use of the +distribution. If term or condition is provided, please contact the Apache Software Foundation +to determine what terms and conditions govern that particular distribution. diff --git a/das-java/branches/das-java-M2/distribution/binary/README.txt b/das-java/branches/das-java-M2/distribution/binary/README.txt new file mode 100644 index 0000000000..d6827f6719 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/binary/README.txt @@ -0,0 +1,10 @@ + Apache Tuscany + ------------------------------------------- + +Welcome to Tuscany! Please read the release notes (RELEASE_NOTES.txt) in this directory for +details on the current release. + +Thanks from all of us on the Tuscany team for downloading the package; help +us make it better by sending comments to tuscany-user@ws.apache.org. + + diff --git a/das-java/branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt b/das-java/branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt new file mode 100644 index 0000000000..a116778476 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/binary/RELEASE_NOTES.txt @@ -0,0 +1,53 @@ +What's new in DAS Java M2 + + DAS Core features + + - MySQL support + + - Static Data Objects + + - Dynamic root for static graphs + + - "Unique" attribute on relationships + + - Explicit ResultSet shape definition + + - Improved logging + + - Programmatic Configuration + + - Helper for empty SDO Graph + + - Convention over configuration + + - Column named "ID" is the PK + + - Column named "xxx_ID" is the FK to table "xxx" + + + DAS Samples + + - Tomcat integration and automated DAS samples testing (htmlUnit) + + - DAS Samples now have all dependencies and source code inside the sample war + + + For detailed user documentation and feature descriptions, access Tuscany DAS Wiki page + + http://wiki.apache.org/ws/Tuscany/TuscanyJava/DAS_Java_Overview + + Downloading + + http://incubator.apache.org/tuscany/downloads.html#Apache%20Tuscany%20Java%20Downloads + + +Details are described below. + + DAS Java M2 is a superset of previous DAS Java M1 release. + Anything in M1 is also in M2, but M2 contains features and bugfixes not present in M1 release. + +Compatibility Concerns + + - We have removed support for named parameters and previous DAS configuration files will have to be updated as needed. + + diff --git a/das-java/branches/das-java-M2/distribution/binary/STATUS.txt b/das-java/branches/das-java-M2/distribution/binary/STATUS.txt new file mode 100644 index 0000000000..24a37ea606 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/binary/STATUS.txt @@ -0,0 +1,73 @@ +Apache Tuscany Status + +Tuscany provides multiple language implementations of the Service Component Architecture (SCA) specifications and related technologies such as SDO. + +PROJECT STATUS +============== + + Tuscany is being incubated at the request of the Apache Web Services PMC. + For information on incubation please visit the project page at + http://incubator.apache.org/projects/tuscany.html + +PENDING ISSUES +============== +XXXX-XX-XX CCLA received for IBM's contribution of a C++ implementation +XXXX-XX-XX CCLA received for BEA and IBM joint contribution of a Java implementation + +RESOLVED ISSUES SINCE LAST STATUS +================================= +None + +OTHER NEWS +========== + +2006-09-29 Vote to add Ignacio Silva-Lepe as a new committer +2006-09-18 Vote to add Venkata Krishnan as a new committer +2006-08-10 Vote to add Andrew Borley as a new committer +2006-08-07 Vote to add Meeraj Kunnumpurath as a new committer +2006-08-07 Vote to add Kelvin Goodson as a new committer +2006-08-06 Vote to add Brent Daniel as a new committer +2006-08-04 Vote to add Raymond Feng as a new committer +2006-08-01 C++ Milestone 1 release +2006-06-07 Java Milestone 1 release +2006-05-02 Vote to add Dan Kulp as a new committer + +2006-01-05 Contribution of Java implementation by BEA and IBM committed +2006-01-05 Contribution of C+ implementation by IBM committed + +RELEASE STATUS +============== +None + +REFERENCES +========== +Status file http://svn.apache.org/repos/asf/incubator/tuscany/STATUS +User List tuscany-user@ws.apache.org +Developer List tuscany-dev@ws.apache.org +Commits List tuscany-commits@ws.apache.org +Source Code http://svn.apache.org/repos/asf/incubator/tuscany/ +Issue Tracking http://issues.apache.org/jira/browse/TUSCANY + +Committers + ajborley Andrew Borley + antelder Ant Elder + bdaniel Brent Daniel + dkulp Dan Kulp + dims Davanum Srinivas + edslattery Ed Slattery + ekoneil Eddie O'Neil + frankb Frank Budinsky + geirm Geir Magnusson Jr + isilval Ignacio Silva-Lepe + jsdelfino Jean-Sebastien Delfino + jboynes Jeremy Boynes + jmarino Jim Marino + kelvingoodson Kelvin Goodson + kentam Ken Tam + kwilliams Kevin Williams + edwardsmj Mike Edwards + meerajk Meeraj Kunnumpurath + rfeng Raymond Feng + robbinspg Pete Robbins + rineholt Rick Rineholt + svkrish Venkata Krishnan diff --git a/das-java/branches/das-java-M2/distribution/binary/pom.xml b/das-java/branches/das-java-M2/distribution/binary/pom.xml new file mode 100644 index 0000000000..ffd7fbd4fb --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/binary/pom.xml @@ -0,0 +1,63 @@ + + + + 4.0.0 + + org.apache.tuscany.das + tuscany-das + 1.0-incubator-M2-SNAPSHOT + + das + pom + Tuscany DAS Distribution + Tuscany Distribution for DAS. + + + + org.apache.tuscany.das + tuscany-das-rdb + ${pom.version} + + + + + install + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2-SNAPSHOT + + + package + + single + + + + + + src/main/assembly/das.xml + + + + + + diff --git a/das-java/branches/das-java-M2/distribution/binary/src/main/assembly/das.xml b/das-java/branches/das-java-M2/distribution/binary/src/main/assembly/das.xml new file mode 100644 index 0000000000..82b3492a7b --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/binary/src/main/assembly/das.xml @@ -0,0 +1,48 @@ + + + bin + false + + zip + tar.gz + + + + + + + *.txt + *.htm + *.html + + + + + + + lib + + org.apache.tuscany.das:tuscany-das-rdb + + 644 + + + + diff --git a/das-java/branches/das-java-M2/distribution/samples/LICENSE.txt b/das-java/branches/das-java-M2/distribution/samples/LICENSE.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/samples/LICENSE.txt @@ -0,0 +1,202 @@ + + 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. diff --git a/das-java/branches/das-java-M2/distribution/samples/NOTICE.txt b/das-java/branches/das-java-M2/distribution/samples/NOTICE.txt new file mode 100644 index 0000000000..f1aa4f1921 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/samples/NOTICE.txt @@ -0,0 +1,32 @@ +Apache Tuscany DAS for Java +Copyright 2006 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), +sponsored by the Apache 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. + +Unless otherwise indicated, all distribution made available by the Apache Software Foundation +is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). +A copy of the AL is provided with this distribution as the LICENSE.txt file present in the +root directory, and is also available at http://www.apache.org/licenses/. + +The terms and conditions governing the distribution may refer to the AL or other license +agreements, notices or terms and conditions. Some of these other license agreements may +include (but are not limited to): + + . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) + . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) + +This product also includes software developed by: +- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) + +It is your obligation to read and accept all such terms and conditions prior to use of the +distribution. If term or condition is provided, please contact the Apache Software Foundation +to determine what terms and conditions govern that particular distribution. diff --git a/das-java/branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt b/das-java/branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt new file mode 100644 index 0000000000..a116778476 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/samples/RELEASE_NOTES.txt @@ -0,0 +1,53 @@ +What's new in DAS Java M2 + + DAS Core features + + - MySQL support + + - Static Data Objects + + - Dynamic root for static graphs + + - "Unique" attribute on relationships + + - Explicit ResultSet shape definition + + - Improved logging + + - Programmatic Configuration + + - Helper for empty SDO Graph + + - Convention over configuration + + - Column named "ID" is the PK + + - Column named "xxx_ID" is the FK to table "xxx" + + + DAS Samples + + - Tomcat integration and automated DAS samples testing (htmlUnit) + + - DAS Samples now have all dependencies and source code inside the sample war + + + For detailed user documentation and feature descriptions, access Tuscany DAS Wiki page + + http://wiki.apache.org/ws/Tuscany/TuscanyJava/DAS_Java_Overview + + Downloading + + http://incubator.apache.org/tuscany/downloads.html#Apache%20Tuscany%20Java%20Downloads + + +Details are described below. + + DAS Java M2 is a superset of previous DAS Java M1 release. + Anything in M1 is also in M2, but M2 contains features and bugfixes not present in M1 release. + +Compatibility Concerns + + - We have removed support for named parameters and previous DAS configuration files will have to be updated as needed. + + diff --git a/das-java/branches/das-java-M2/distribution/samples/STATUS.txt b/das-java/branches/das-java-M2/distribution/samples/STATUS.txt new file mode 100644 index 0000000000..24a37ea606 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/samples/STATUS.txt @@ -0,0 +1,73 @@ +Apache Tuscany Status + +Tuscany provides multiple language implementations of the Service Component Architecture (SCA) specifications and related technologies such as SDO. + +PROJECT STATUS +============== + + Tuscany is being incubated at the request of the Apache Web Services PMC. + For information on incubation please visit the project page at + http://incubator.apache.org/projects/tuscany.html + +PENDING ISSUES +============== +XXXX-XX-XX CCLA received for IBM's contribution of a C++ implementation +XXXX-XX-XX CCLA received for BEA and IBM joint contribution of a Java implementation + +RESOLVED ISSUES SINCE LAST STATUS +================================= +None + +OTHER NEWS +========== + +2006-09-29 Vote to add Ignacio Silva-Lepe as a new committer +2006-09-18 Vote to add Venkata Krishnan as a new committer +2006-08-10 Vote to add Andrew Borley as a new committer +2006-08-07 Vote to add Meeraj Kunnumpurath as a new committer +2006-08-07 Vote to add Kelvin Goodson as a new committer +2006-08-06 Vote to add Brent Daniel as a new committer +2006-08-04 Vote to add Raymond Feng as a new committer +2006-08-01 C++ Milestone 1 release +2006-06-07 Java Milestone 1 release +2006-05-02 Vote to add Dan Kulp as a new committer + +2006-01-05 Contribution of Java implementation by BEA and IBM committed +2006-01-05 Contribution of C+ implementation by IBM committed + +RELEASE STATUS +============== +None + +REFERENCES +========== +Status file http://svn.apache.org/repos/asf/incubator/tuscany/STATUS +User List tuscany-user@ws.apache.org +Developer List tuscany-dev@ws.apache.org +Commits List tuscany-commits@ws.apache.org +Source Code http://svn.apache.org/repos/asf/incubator/tuscany/ +Issue Tracking http://issues.apache.org/jira/browse/TUSCANY + +Committers + ajborley Andrew Borley + antelder Ant Elder + bdaniel Brent Daniel + dkulp Dan Kulp + dims Davanum Srinivas + edslattery Ed Slattery + ekoneil Eddie O'Neil + frankb Frank Budinsky + geirm Geir Magnusson Jr + isilval Ignacio Silva-Lepe + jsdelfino Jean-Sebastien Delfino + jboynes Jeremy Boynes + jmarino Jim Marino + kelvingoodson Kelvin Goodson + kentam Ken Tam + kwilliams Kevin Williams + edwardsmj Mike Edwards + meerajk Meeraj Kunnumpurath + rfeng Raymond Feng + robbinspg Pete Robbins + rineholt Rick Rineholt + svkrish Venkata Krishnan diff --git a/das-java/branches/das-java-M2/distribution/samples/pom.xml b/das-java/branches/das-java-M2/distribution/samples/pom.xml new file mode 100644 index 0000000000..f73645eaa6 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/samples/pom.xml @@ -0,0 +1,64 @@ + + + + 4.0.0 + + org.apache.tuscany.das + tuscany-das + 1.0-incubator-M2-SNAPSHOT + + das-samples + pom + Tuscany DAS Samples Distribution + Tuscany Distribution for DAS Samples. + + + + org.apache.tuscany.das.samples + sample-companyweb + ${pom.version} + war + + + + + install + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2-SNAPSHOT + + + package + + single + + + + + + src/main/assembly/das-samples.xml + + + + + + diff --git a/das-java/branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml b/das-java/branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml new file mode 100644 index 0000000000..4cb2fabb03 --- /dev/null +++ b/das-java/branches/das-java-M2/distribution/samples/src/main/assembly/das-samples.xml @@ -0,0 +1,77 @@ + + + + bin + false + + zip + tar.gz + + + + + + + *.txt + *.htm + *.html + + + + + + + + + ../../samples/companyweb/dastest + databases/dastest + keep + + **/*.* + + 644 + + + + + + + + + + + org.apache.tuscany.das.samples:sample-companyweb + + 644 + + + + + diff --git a/das-java/branches/das-java-M2/pom.xml b/das-java/branches/das-java-M2/pom.xml new file mode 100644 index 0000000000..cfa5129504 --- /dev/null +++ b/das-java/branches/das-java-M2/pom.xml @@ -0,0 +1,122 @@ + + + + 4.0.0 + + org.apache.tuscany + parent + 1-incubator + + org.apache.tuscany.das + tuscany-das + pom + Tuscany DAS + 1.0-incubator-M2-SNAPSHOT + + + 1.0-incubator-M2 + + + + rdb + samples + distribution/binary + distribution/samples + + + + + + apache.snapshots + Apache Snapshot Repository + http://people.apache.org/repo/m2-snapshot-repository + + false + + + true + + + + apache.incubator + Apache Incubator Repository + http://people.apache.org/repo/m2-incubating-repository/ + + true + + + false + + + + + + + + org.apache.tuscany.sdo + tuscany-sdo-impl + ${sdo.version} + compile + + + + junit + junit + 3.8.1 + test + + + + + + install + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.5 + 1.5 + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*TestCase.java + + brief + false + + + + org.apache.maven.plugins + maven-jar-plugin + + + src/main/resources/META-INF/MANIFEST.MF + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/pom.xml b/das-java/branches/das-java-M2/rdb/pom.xml new file mode 100644 index 0000000000..5f93bd014d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/pom.xml @@ -0,0 +1,110 @@ + + + + + org.apache.tuscany.das + tuscany-das + 1.0-incubator-M2-SNAPSHOT + + 4.0.0 + tuscany-das-rdb + Tuscany DAS for Relational Databases + + + + org.apache.tuscany.sdo + tuscany-sdo-impl + ${sdo.version} + + + + junit + junit + 3.8.1 + test + + + org.apache.derby + derby + 10.1.2.1 + test + + + log4j + log4j + 1.2.12 + compile + + + + + + + org.apache.tuscany.sdo + tuscany-sdo-plugin + + + config + + ${basedir}/src/main/resources/config.xsd + true + true + + + generate + + + + company + + ${basedir}/src/test/resources/company.xsd + true + + + generate + + + + customer + + ${basedir}/src/test/resources/customer.xsd + true + + + generate + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*AllTestsDerby.java + + + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java new file mode 100644 index 0000000000..3c80c34b68 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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; + +/** + * A Command is used to execute a read or write to a database + */ +public interface Command { + + /** + * Performs the function defined by the command + */ + void execute(); + + /** + * Performs the function defined by the command and return the results in the root DataObject + * + * @return the root DataObject + */ + DataObject executeQuery(); + + /** + * Sets the value of the associated Parameter + * + * @param index + * the index of the Parameter + * @param value + * the value for the Parameter + */ + void setParameter(int index, Object value); + + /** + * Returns the value of the associated Parameter + * + * @param index + * the index of the Parameter + * @return the value of the Parameter + */ + Object getParameter(int index); + + /** + * Returns the value of the database-generated key. This method is specific + * to an "insert" command and will be valid only after the command has + * been executed. + * + * @return the generated key + */ + int getGeneratedKey(); + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java new file mode 100644 index 0000000000..04d450b020 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.config.Config; +import org.apache.tuscany.das.rdb.config.ConfigFactory; +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; + +/** + * 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 = ConfigFactory.INSTANCE; + + public ConfigHelper() { + config = factory.createConfig(); + configWrapper = new MappingWrapper(config); + } + + public ConfigHelper(Config config) { + this.config = config; + configWrapper = new MappingWrapper(config); + } + + public void addPrimaryKey(String columnName) { + configWrapper.addPrimaryKey(columnName); + } + + public Relationship addRelationship(String parentName, String childName) { + return configWrapper.addRelationship(parentName, childName); + } + + public Table addTable(String name, String propertyName) { + return configWrapper.addTable(name, propertyName); + } + + public void addUpdateStatement(Table table, String statement, String parameters) { + configWrapper.addUpdateStatement(table, statement, parameters); + } + + public void addCreateStatement(Table table, String statement, String parameters) { + configWrapper.addCreateStatement(table, statement, parameters); + } + + public void addDeleteStatement(Table table, String statement, String parameters) { + configWrapper.addDeleteStatement(table, statement, parameters); + } + + public void addConnectionInfo(String dataSourceName, boolean managedtx) { + configWrapper.addConnectionInfo(dataSourceName, managedtx); + } + + public void addConnectionInfo(String dataSourceName) { + configWrapper.addConnectionInfo(dataSourceName, true); + } + + public void setDataObjectModel(String dataObjectModel) { + configWrapper.getConfig().setDataObjectModel(dataObjectModel); + } + + public Command addSelectCommand(String name, String sql) { + return configWrapper.addCommand(name, sql, "select"); + } + + public Command addUpdateCommand(String name, String sql) { + return configWrapper.addCommand(name, sql, "update"); + } + + public Command addInsertCommand(String name, String sql) { + return configWrapper.addCommand(name, sql, "insert"); + } + + public Command addDeleteCommand(String name, String sql) { + return configWrapper.addCommand(name, sql, "delete"); + } + + public Config getConfig() { + return config; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java new file mode 100644 index 0000000000..24f2e5ee2e --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Converter.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 + */ + 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 + */ + Object getColumnValue(Object propertyData); + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java new file mode 100644 index 0000000000..43f1e30d1a --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DAS.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.impl.DASFactoryImpl; + +import commonj.sdo.DataObject; + +/** + * A CommandGroup represents a set of {@link Command} and single {@link ApplyChangesCommand} + * that are created from a common config file. + * + */ +public interface DAS { + + DASFactory FACTORY = new DASFactoryImpl(); + + /** + * 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 + */ + void applyChanges(DataObject root); + + /** + * Gets the named command from this factory's inventory + * + * @param name + * The identifying name of the requested command + * @return Returns the identified command + */ + Command getCommand(String name); + + /** + * If the CommandGroup is managing connections then this method must be called + * when the client is done with the instance. + * + */ + void releaseResources(); + + /** + * Creates a Command based on the provided SQL statement + * + * @param sql + * The SQL statement + * @return returns a Command instance + */ + Command createCommand(String sql); + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java new file mode 100644 index 0000000000..a0e38ab7cf --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/DASFactory.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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; +import java.sql.Connection; + +import org.apache.tuscany.das.rdb.config.Config; + +/** + * A DASFactory produces {@link DAS} instances. + * + * + */ +public interface DASFactory { + + /** + * Creates a DAS based on the provided config file stream + * + * @param configStream + * A stream over a DAS config file + * @return returns a DAS instance + */ + DAS createDAS(InputStream configStream); + + /** + * Creates a DAS based on the provide config file stream and connection + * @param configStream + * @param connection + * @return + */ + DAS createDAS(InputStream configStream, Connection connection); + + /** + * Creates a DAS based on the provided config + * + * @param config + * A DAS config object + * @return returns a DAS instance + */ + DAS createDAS(Config config); + + /** + * Creates a DAS based on the provided config and connection + * @param config + * @param connection + * @return + */ + DAS createDAS(Config config, Connection connection); + + /** + * Creates a DAS based on the provided connection + * @param connection + * @return + */ + DAS createDAS(Connection connection); + + +} + diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java new file mode 100644 index 0000000000..aa18558fce --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/Pager.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 + */ + DataObject next(); + + /** + * Get the page prior to the last page returned + * + * @return the previous page + */ + DataObject previous(); + + /** + * Return a specific identified page. + * + * @param page + * The number of the page to return + * @return the indicated page + */ + DataObject getPage(int page); + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java new file mode 100644 index 0000000000..cca0db6c07 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java @@ -0,0 +1,491 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.config.Column; +import org.apache.tuscany.das.rdb.config.Command; +import org.apache.tuscany.das.rdb.config.Config; +import org.apache.tuscany.das.rdb.config.ConfigFactory; +import org.apache.tuscany.das.rdb.config.ConnectionInfo; +import org.apache.tuscany.das.rdb.config.Create; +import org.apache.tuscany.das.rdb.config.Delete; +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.Update; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +import commonj.sdo.Property; + +public class MappingWrapper { + + private static final ConfigFactory FACTORY = ConfigFactory.INSTANCE; + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(MappingWrapper.class); + + private Config config; + + public MappingWrapper() { + config = FACTORY.createConfig(); + } + + public MappingWrapper(Config mapping) { + if (mapping == null) { + this.config = FACTORY.createConfig(); + } else { + this.config = mapping; + } + } + + public Config getConfig() { + return this.config; + } + + public Table getTable(String tableName) { + + if (this.logger.isDebugEnabled()) { + this.logger.debug("Looking for table " + tableName); + } + + Iterator i = config.getTable().iterator(); + while (i.hasNext()) { + Table t = (Table) i.next(); + if (tableName.equalsIgnoreCase(t.getTableName())) { + return t; + } + } + + return null; + } + + public Table getTableByTypeName(String typeName) { + + if (this.logger.isDebugEnabled()) { + this.logger.debug("Looking for table by property: " + typeName); + } + + Iterator i = config.getTable().iterator(); + while (i.hasNext()) { + Table t = (Table) i.next(); + TableWrapper wrapper = new TableWrapper(t); + if (typeName.equals(wrapper.getTypeName())) { + return t; + } + } + return null; + + } + + public void addImpliedRelationship(String parentTableName, String childTableName, String fkColumnName) { + + // Don't create a relationship for something like Book.Book_ID + if (parentTableName.equalsIgnoreCase(childTableName)) { + return; + } + + // Don't create a relationship if one already exists in the config + Iterator i = config.getRelationship().iterator(); + while (i.hasNext()) { + Relationship r = (Relationship) i.next(); + if (r.getPrimaryKeyTable().equals(parentTableName) && r.getForeignKeyTable().equals(childTableName)) { + return; + } + } + + Relationship r = FACTORY.createRelationship(); + r.setName(childTableName); + r.setPrimaryKeyTable(parentTableName); + r.setForeignKeyTable(childTableName); + + KeyPair pair = FACTORY.createKeyPair(); + pair.setPrimaryKeyColumn("ID"); + pair.setForeignKeyColumn(fkColumnName); + + r.getKeyPair().add(pair); + r.setMany(true); + + config.getRelationship().add(r); + } + + public Relationship addRelationship(String parentName, String childName) { + + 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()); + + if (this.logger.isDebugEnabled()) { + this.logger.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); + + return r; + + } + + public void addPrimaryKey(String columnName) { + addPrimaryKey(Collections.singletonList(columnName)); + } + + public void addPrimaryKey(List columnNames) { + + Iterator i = columnNames.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); + } + } + + public String getTableTypeName(String tableName) { + Table t = getTable(tableName); + if (t == null) { + return tableName; + } + String propertyName = t.getTypeName(); + + if (propertyName == null) { + return tableName; + } + + return propertyName; + } + + public Column getColumn(Table t, String columnName) { + if (t == null) { + return null; + } + Iterator i = t.getColumn().iterator(); + while (i.hasNext()) { + Column c = (Column) i.next(); + if (c.getColumnName().equals(columnName)) { + return c; + } + } + + if (this.logger.isDebugEnabled()) { + this.logger.debug("WARNING: Could not find column " + columnName + " in table " + t.getTableName()); + } + + 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.getColumnName().equals(propertyName)) { + return c; + } + + if (c.getPropertyName() != null && c.getPropertyName().equals(propertyName)) { + return c; + } + } + + if (this.logger.isDebugEnabled()) { + this.logger.debug("WARNING: Could not find column " + propertyName + " in table " + t.getTableName()); + } + + 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.getColumnName(); + } + + return propertyName; + } + + public Table addTable(String tableName, String typeName) { + Table table = getTable(tableName); + if (table != null) { + throw new RuntimeException("Table " + tableName + "already exists"); + } + + table = ConfigFactory.INSTANCE.createTable(); + table.setTableName(tableName); + table.setTypeName(typeName); + config.getTable().add(table); + + return table; + } + + private Table findOrCreateTable(String tableName) { + Table table = getTable(tableName); + if (table == null) { + table = ConfigFactory.INSTANCE.createTable(); + table.setTableName(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.getColumnName())) { + return c; + } + } + + Column c = ConfigFactory.INSTANCE.createColumn(); + c.setColumnName(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) { + List 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 List getInsertOrder() { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Getting insert order"); + } + + List inserts = new ArrayList(); + Map parentToChild = new HashMap(); + + List parents = new ArrayList(); + List 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); + } + + if (this.logger.isDebugEnabled()) { + this.logger.debug(inserts); + } + + return inserts; + } + + public List getDeleteOrder() { + List deleteOrder = new ArrayList(); + deleteOrder.addAll(getInsertOrder()); + Collections.reverse(deleteOrder); + return deleteOrder; + } + + public void addConverter(String name, String converter) { + + 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 Map getConverters(Table table) { + Map 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.getColumnName(); + } + 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"); + } + + public void addUpdateStatement(Table table, String statement, String parameters) { + + Update update = ConfigFactory.INSTANCE.createUpdate(); + update.setSql(statement); + update.setParameters(parameters); + table.setUpdate(update); + + } + + public void addDeleteStatement(Table table, String statement, String parameters) { + + Delete delete = ConfigFactory.INSTANCE.createDelete(); + delete.setSql(statement); + delete.setParameters(parameters); + table.setDelete(delete); + + } + + public void addCreateStatement(Table table, String statement, String parameters) { + + Create create = ConfigFactory.INSTANCE.createCreate(); + create.setSql(statement); + create.setParameters(parameters); + table.setCreate(create); + + } + + public void addConnectionInfo(String dataSourceName, boolean managedtx) { + ConnectionInfo info = ConfigFactory.INSTANCE.createConnectionInfo(); + info.setDataSource(dataSourceName); + info.setManagedtx(managedtx); + config.setConnectionInfo(info); + } + + public Command addCommand(String name, String sql, String kind) { + Command cmd = ConfigFactory.INSTANCE.createCommand(); + cmd.setName(name); + cmd.setKind(kind); + cmd.setSQL(sql); + + config.getCommand().add(cmd); + + return cmd; + } + + public void addImpliedPrimaryKey(String tableName, String columnName) { + Table t = findOrCreateTable(tableName); + + Iterator i = t.getColumn().iterator(); + boolean hasPK = false; + while (i.hasNext()) { + Column c = (Column) i.next(); + if (c.isPrimaryKey()) { + hasPK = true; + } + } + + if (!hasPK) { + Column c = findOrCreateColumn(t, columnName); + c.setPrimaryKey(true); + } + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java new file mode 100644 index 0000000000..19824e4e99 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +public class QualifiedColumn { + + private final String tableName; + + private final String columnName; + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(QualifiedColumn.class); + + public QualifiedColumn(String name) { + tableName = name.substring(0, name.indexOf('.')); + columnName = name.substring(name.indexOf('.') + 1); + + if (this.logger.isDebugEnabled()) { + this.logger.debug("Table name: " + tableName); + this.logger.debug("Column name: " + columnName); + } + } + + public String getTableName() { + return this.tableName; + } + + public String getColumnName() { + return this.columnName; + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java new file mode 100644 index 0000000000..0e4447bf8b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/RelationshipWrapper.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; + +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() { + List 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java new file mode 100644 index 0000000000..82961861e2 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/TableWrapper.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; + +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 getTypeName() { + return table.getTypeName() == null ? table.getTableName() : table.getTypeName(); + } + + public Collection getPrimaryKeyNames() { + List pkNames = new ArrayList(); + Iterator i = table.getColumn().iterator(); + while (i.hasNext()) { + Column c = (Column) i.next(); + if (c.isPrimaryKey()) { + pkNames.add(c.getColumnName()); + } + } + return pkNames; + } + + public Collection getPrimaryKeyProperties() { + + List 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(); + } + + return c.getColumnName(); + } + + public boolean isGeneratedColumnProperty(String name) { + Column c = getColumnByPropertyName(name); + return c == null ? false : c.isGenerated(); + } + + 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.getColumnName(); + } + 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(); + } + return c.getColumnName(); + + } + + public String getManagedColumnPropertyName() { + Iterator i = table.getColumn().iterator(); + while (i.hasNext()) { + Column c = (Column) i.next(); + if (c.isManaged()) { + return c.getPropertyName() == null ? c.getColumnName() : c.getPropertyName(); + } + } + return null; + + } + + public Column getManagedColumn() { + Iterator i = table.getColumn().iterator(); + while (i.hasNext()) { + Column c = (Column) i.next(); + if (c.isManaged()) { + return c; + } + } + return null; + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java new file mode 100644 index 0000000000..05d97723a7 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/BaseGenerator.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.tuscany.das.rdb.Converter; + +public class BaseGenerator { + + protected Converter getConverter(String converter) { + if (converter != null) { + try { + return (Converter) Thread.currentThread().getContextClassLoader().loadClass(converter).newInstance(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + return null; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java new file mode 100644 index 0000000000..30a222634b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Iterator; + +import org.apache.log4j.Logger; +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.impl.SDODataTypes; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +public final class DeleteGenerator extends BaseGenerator { + + public static final DeleteGenerator INSTANCE = new DeleteGenerator(); + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(DeleteGenerator.class); + + private DeleteGenerator() { + super(); + } + + private String getDeleteStatement(Table t) { + TableWrapper table = new TableWrapper(t); + + StringBuffer statement = new StringBuffer(); + statement.append("delete from "); + statement.append(t.getTableName()); + 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 "); + } + } + + if (this.logger.isDebugEnabled()) { + this.logger.debug(statement.toString()); + } + + return statement.toString(); + } + + public DeleteCommandImpl getDeleteCommand(Table t) { + TableWrapper tw = new TableWrapper(t); + DeleteCommandImpl deleteCommand = new DeleteCommandImpl(getDeleteStatement(t)); + + Iterator i = tw.getPrimaryKeyProperties().iterator(); + for (int idx = 1; i.hasNext(); idx++) { + String property = (String) i.next(); + ParameterImpl p = new ParameterImpl(); + p.setName(property); + p.setType(SDODataTypes.OBJECT); + p.setConverter(getConverter(tw.getConverter(property))); + p.setIndex(idx); + deleteCommand.addParameter(p); + } + return deleteCommand; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java new file mode 100644 index 0000000000..5fda043253 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Collections; +import java.util.Iterator; +import java.util.List; + +import org.apache.log4j.Logger; +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.LoggerFactory; + +import commonj.sdo.DataObject; +import commonj.sdo.Property; + +public final class InsertGenerator extends BaseGenerator { + + public static final InsertGenerator INSTANCE = new InsertGenerator(); + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(InsertGenerator.class); + + private InsertGenerator() { + super(); + } + + public InsertCommandImpl getInsertCommand(MappingWrapper config, DataObject changedObject, Table t) { + List parameters = new ArrayList(); + TableWrapper table = new TableWrapper(t); + StringBuffer statement = new StringBuffer("insert into "); + statement.append(t.getTableName()); + + Iterator i = getAttributeProperties(changedObject, config).iterator(); + + List attributes = new ArrayList(); + List generatedKeys = new ArrayList(); + while (i.hasNext()) { + Property attr = (Property) i.next(); + if (table.isGeneratedColumnProperty(attr.getName())) { + generatedKeys.add(attr.getName()); + } else { + 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(), + (String[]) generatedKeys.toArray(new String[0])); + Iterator params = parameters.iterator(); + for (int idx = 1; params.hasNext(); idx++) { + Property property = (Property) params.next(); + ParameterImpl p = new ParameterImpl(); + p.setName(property.getName()); + p.setType(property.getType()); + p.setConverter(getConverter(table.getConverter(property.getName()))); + p.setIndex(idx); + cmd.addParameter(p); + + } + if (this.logger.isDebugEnabled()) { + this.logger.debug(statement.toString()); + } + + return cmd; + + } + + private List getAttributeProperties(DataObject obj, MappingWrapper config) { + List 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() != null && 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; + + } + + private boolean hasState(MappingWrapper config, Relationship rel, DataObject changedObject) { + + if (!rel.isMany()) { + Table t = config.getTableByTypeName(changedObject.getType().getName()); + TableWrapper tw = new TableWrapper(t); + RelationshipWrapper rw = new RelationshipWrapper(rel); + if ((rel.getForeignKeyTable().equals(t.getTableName())) + && (Collections.disjoint(tw.getPrimaryKeyProperties(), rw.getForeignKeys()))) { + return true; + } + } + + return false; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java new file mode 100644 index 0000000000..e2c62fd6ee --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java @@ -0,0 +1,194 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Iterator; +import java.util.List; + +import org.apache.log4j.Logger; +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.ManagedParameterImpl; +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.LoggerFactory; + +import commonj.sdo.ChangeSummary; +import commonj.sdo.DataObject; +import commonj.sdo.Property; +import commonj.sdo.Type; + +public final class UpdateGenerator extends BaseGenerator { + + public static final UpdateGenerator INSTANCE = new UpdateGenerator(); + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(UpdateGenerator.class); + + private UpdateGenerator() { + super(); + } + + public UpdateCommandImpl getUpdateCommand(MappingWrapper mapping, DataObject changedObject, Table table) { + List updatedProperties = new ArrayList(); + List managedProperties = new ArrayList(); + List whereClauseProperties = new ArrayList(); + Type type = changedObject.getType(); + TableWrapper t = new TableWrapper(table); + StringBuffer statement = new StringBuffer("update "); + statement.append(table.getTableName()); + statement.append(" set "); + + ChangeSummary summary = changedObject.getDataGraph().getChangeSummary(); + Iterator i = getChangedFields(mapping, summary, changedObject).iterator(); + + while (i.hasNext()) { + Property property = (Property) i.next(); + Column c = t.getColumnByPropertyName(property.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 { + updatedProperties.add(property); + statement.append(c == null ? property.getName() : c.getColumnName()); + statement.append(" = ?"); + if (i.hasNext()) { + statement.append(", "); + } + } + } + + Column c = t.getManagedColumn(); + if (c != null) { + statement.append(", "); + statement.append(c.getColumnName()); + statement.append(" = ?"); + managedProperties.add(changedObject.getProperty(t.getManagedColumnPropertyName())); + } + statement.append(" where "); + + Iterator names = t.getPrimaryKeyNames().iterator(); + Iterator pkProperties = t.getPrimaryKeyProperties().iterator(); + while (names.hasNext() && pkProperties.hasNext()) { + String name = (String) names.next(); + String property = (String) pkProperties.next(); + statement.append(name); + statement.append(" = ?"); + if (names.hasNext() && pkProperties.hasNext()) { + statement.append(" and "); + } + whereClauseProperties.add(type.getProperty(property)); + } + + if (t.getCollisionColumn() != null) { + statement.append(" and "); + statement.append(t.getCollisionColumn().getColumnName()); + statement.append(" = ?"); + whereClauseProperties.add(type.getProperty(t.getCollisionColumnPropertyName())); + } + + UpdateCommandImpl updateCommand; + if (t.getCollisionColumn() != null) { + updateCommand = new OptimisticWriteCommandImpl(statement.toString()); + } else { + updateCommand = new UpdateCommandImpl(statement.toString()); + } + + int idx = 1; + Iterator params = updatedProperties.iterator(); + while (params.hasNext()) { + Property p = (Property) params.next(); + updateCommand.addParameter(createParameter(t, p, idx++)); + } + + params = managedProperties.iterator(); + while (params.hasNext()) { + Property p = (Property) params.next(); + updateCommand.addParameter(createManagedParameter(t, p, idx++)); + } + + params = whereClauseProperties.iterator(); + while (params.hasNext()) { + Property p = (Property) params.next(); + updateCommand.addParameter(createParameter(t, p, idx++)); + } + + if (this.logger.isDebugEnabled()) { + this.logger.debug(statement.toString()); + } + + return updateCommand; + } + + private List getChangedFields(MappingWrapper mapping, ChangeSummary summary, DataObject obj) { + List 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 ParameterImpl createManagedParameter(TableWrapper table, Property property, int idx) { + ParameterImpl param = new ManagedParameterImpl(); + param.setName(property.getName()); + param.setType(property.getType()); + param.setConverter(getConverter(table.getConverter(property.getName()))); + if (idx != -1) { + param.setIndex(idx); + } + + return param; + } + + private ParameterImpl createParameter(TableWrapper table, Property property, int idx) { + ParameterImpl param = new ParameterImpl(); + param.setName(property.getName()); + param.setType(property.getType()); + param.setConverter(getConverter(table.getConverter(property.getName()))); + if (idx != -1) { + param.setIndex(idx); + } + + return param; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java new file mode 100644 index 0000000000..d92da316ea --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DataObjectMaker.java @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +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 final Logger logger = LoggerFactory.INSTANCE.getLogger(DataObjectMaker.class); + + 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 + + if (this.logger.isDebugEnabled()) { + this.logger.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); + } else { + this.rootObject.set(p, obj); + } + } + + } + + Iterator columnNames = resultMetadata.getPropertyNames(tableData.getTableName()).iterator(); + while (columnNames.hasNext()) { + String propertyName = (String) columnNames.next(); + + Property p = findProperty(obj.getType(), propertyName); + if (p == null) { + throw new RuntimeException("Type " + obj.getType().getName() + + " does not contain a property named " + propertyName); + } + + Object value = tableData.getColumnData(propertyName); + + obj.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(); + if (tableName.equals(p.getType().getName())) { + return p.getType(); + } + } + + return null; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java new file mode 100644 index 0000000000..a08f184b9a --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/DefaultConverter.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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); + } + } + + return data; + + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java new file mode 100644 index 0000000000..54afe95168 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java @@ -0,0 +1,247 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.tuscany.das.rdb.config.Config; +import org.apache.tuscany.das.rdb.config.Relationship; +import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.impl.ResultSetShape; +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; + +/** + */ +public class GraphBuilderMetadata { + + private MappingWrapper configWrapper; + + private final Collection resultSets = new ArrayList(); + + private String typeURI; + + private Type rootType; + + private TypeHelper typeHelper = SDOUtil.createTypeHelper(); + + public GraphBuilderMetadata(Collection results, Config model, ResultSetShape shape) throws SQLException { + this.configWrapper = new MappingWrapper(model); + if (model != null) { + this.typeURI = model.getDataObjectModel(); + } + + Iterator i = results.iterator(); + while (i.hasNext()) { + ResultSet rs = (ResultSet) i.next(); + ResultMetadata resultMetadata = new ResultMetadata(rs, configWrapper, shape); + resultSets.add(resultMetadata); + } + + } + + /** + * Returns the collection of ResultMetadata objects + */ + public Collection getResultMetadata() { + return this.resultSets; + } + + /** + * Returns the set of defined relationships + */ + + public Collection getRelationships() { + return configWrapper.getConfig().getRelationship(); + } + + /** + * Returns the root Type + */ + public Type getRootType() { + if (this.rootType == null) { + if (this.typeURI == null) { + createDynamicTypes(); + } else { + createDynamicRoot(); + } + } + + return this.rootType; + } + + public MappingWrapper getConfigWrapper() { + return this.configWrapper; + } + + /** + * Creates a set of SDO Types based on the query results and supplied config information + */ + + private void createDynamicTypes() { + + DataObjectUtil.initRuntime(); + + Type root = SDOUtil.createType(typeHelper, getDefaultURI(), "DataGraphRoot", false); + + Iterator iter = getResultMetadata().iterator(); + while (iter.hasNext()) { + + ResultMetadata resultMetadata = (ResultMetadata) iter.next(); + + // Create a Type for each Table represented in the ResultSet + Iterator names = resultMetadata.getAllTablePropertyNames().iterator(); + while (names.hasNext()) { + String tableName = (String) names.next(); + + if (root.getProperty(tableName) == null) { + Type tableType = SDOUtil.createType(typeHelper, getDefaultURI(), tableName, false); + Property property = SDOUtil.createProperty(root, tableName, tableType); + SDOUtil.setMany(property, true); + SDOUtil.setContainment(property, true); + } + } + + // TODO tablePropertyMap is temporary until Tuscany-203 is fixed + Map tablePropertyMap = new HashMap(); + + for (int i = 1; i <= resultMetadata.getResultSetSize(); i++) { + + Property ref = root.getProperty(resultMetadata.getTablePropertyName(i)); + + if (ref == null) { + throw new RuntimeException("Could not find table " + resultMetadata.getTablePropertyName(i) + + " in the SDO model"); + } + + // TODO Temporary code to check to see if a property has already been added. + // Replace when Tuscany-203 is fixed + List addedProperties = (List) tablePropertyMap.get(ref.getName()); + if (addedProperties == null) { + addedProperties = new ArrayList(); + tablePropertyMap.put(ref.getName(), addedProperties); + } + + + + String columnName = resultMetadata.getColumnPropertyName(i); + + // TODO temporary check until Tuscany-203 is fixed + if (!addedProperties.contains(columnName)) { + addedProperties.add(columnName); + Type atype = resultMetadata.getDataType(i); + + SDOUtil.createProperty(ref.getType(), columnName, atype); + + } + + } + } + + MappingWrapper wrapper = getConfigWrapper(); + Iterator i = getRelationships().iterator(); + while (i.hasNext()) { + Relationship r = (Relationship) i.next(); + + String parentName = wrapper.getTableTypeName(r.getPrimaryKeyTable()); + String childName = wrapper.getTableTypeName(r.getForeignKeyTable()); + + if (parentName == null) { + throw new RuntimeException("The parent table (" + r.getPrimaryKeyTable() + + ") in relationship " + r.getName() + + " was not found in the mapping information."); + } else if (childName == null) { + throw new RuntimeException("The child table (" + r.getForeignKeyTable() + + ") in relationship " + r.getName() + + " was not found in the mapping information."); + } + + Property parentProperty = root.getProperty(parentName); + Property childProperty = root.getProperty(childName); + + if (parentProperty == null) { + throw new RuntimeException("The parent table (" + parentName + ") in relationship " + + r.getName() + " was not found."); + } else if (childProperty == null) { + throw new RuntimeException("The child table (" + childName + ") in relationship " + + r.getName() + " was not found."); + } + + Type parent = parentProperty.getType(); + Type child = childProperty.getType(); + + 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()); + } + + this.rootType = root; + } + + private String getDefaultURI() { + return "http:///org.apache.tuscany.das.rdb/das"; + } + + /** + * Create a dynamic root Type to act as a container Type for a set of generated Types + * + */ + private void createDynamicRoot() { + Type root = SDOUtil.createType(typeHelper, getDefaultURI() + "/DataGraphRoot", "DataGraphRoot", false); + + List types = SDOUtil.getTypes(typeHelper, typeURI); + if (types == null) { + throw new RuntimeException("SDO Types have not been registered for URI " + typeURI); + } + + Iterator i = types.iterator(); + while (i.hasNext()) { + Type type = (Type) i.next(); + Property property = SDOUtil.createProperty(root, type.getName(), type); + SDOUtil.setContainment(property, true); + SDOUtil.setMany(property, true); + } + this.rootType = root; + } + + public List getDefinedTypes() { + if (this.typeURI == null) { + return SDOUtil.getTypes(typeHelper, getDefaultURI()); + } + + List types = SDOUtil.getTypes(typeHelper, typeURI); + types.add(rootType); + return types; + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java new file mode 100644 index 0000000000..f7de59f1a1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/MultiTableRegistry.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +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 final Logger logger = LoggerFactory.INSTANCE.getLogger(MultiTableRegistry.class); + + private Map tableNameMap; + + private Map tableValueMap; + + 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 (this.logger.isDebugEnabled()) { + this.logger.debug("Looking for table " + tableName + " with PK " + primaryKey); + this.logger.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 Map getPkMap(String tableName) { + Map 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java new file mode 100644 index 0000000000..09e1a98d9d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java @@ -0,0 +1,285 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; +import java.util.Map; + +import org.apache.tuscany.das.rdb.Converter; +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.impl.ResultSetShape; + +import commonj.sdo.Type; + +public class ResultMetadata { + + private Map tableToPropertyMap = new HashMap(); + + private List typeNames = new ArrayList(); + + private List propertyNames = new ArrayList(); + + private final ResultSet resultSet; + + private final ResultSetShape resultSetShape; + + private final MappingWrapper configWrapper; + + private Converter[] converters; + + public ResultMetadata(ResultSet rs, MappingWrapper cfgWrapper, ResultSetShape shape) throws SQLException { + + this.resultSet = rs; + this.configWrapper = cfgWrapper; + + if (shape == null) { + this.resultSetShape = new ResultSetShape(rs.getMetaData()); + } else { + this.resultSetShape = shape; + } + + this.converters = new Converter[resultSetShape.getColumnCount()]; + + Map impliedRelationships = new HashMap(); + for (int i = 1; i <= resultSetShape.getColumnCount(); i++) { + String tableName = resultSetShape.getTableName(i); + + String typeName = configWrapper.getTableTypeName(tableName); + String columnName = resultSetShape.getColumnName(i); + + if (columnName.contains("_ID")) { + impliedRelationships.put(columnName, tableName); + } else if (columnName.equalsIgnoreCase("ID")) { + configWrapper.addImpliedPrimaryKey(tableName, columnName); + } + + String propertyName = configWrapper.getColumnPropertyName(tableName, columnName); + String converterName = configWrapper.getConverter(tableName, resultSetShape.getColumnName(i)); + + converters[i - 1] = loadConverter(converterName); + + typeNames.add(typeName); + propertyNames.add(propertyName); + + Collection properties = (Collection) tableToPropertyMap.get(typeName); + if (properties == null) { + properties = new ArrayList(); + } + properties.add(propertyName); + tableToPropertyMap.put(typeName, properties); + } + + Iterator i = impliedRelationships.keySet().iterator(); + while (i.hasNext()) { + String columnName = (String) i.next(); + String pkTableName = columnName.substring(0, columnName.indexOf("_ID")); + String fkTableName = (String) impliedRelationships.get(columnName); + List pkTableProperties = (List) tableToPropertyMap.get(pkTableName); + if ((pkTableProperties != null) && (pkTableProperties.contains("ID"))) { + configWrapper.addImpliedRelationship(pkTableName, fkTableName, columnName); + } + } + // Add any tables defined in the model but not included in the ResultSet + // to the list of propertyNames + Config model = configWrapper.getConfig(); + if (model != null) { + Iterator tablesFromModel = model.getTable().iterator(); + while (tablesFromModel.hasNext()) { + TableWrapper t = new TableWrapper((Table) tablesFromModel.next()); + if (tableToPropertyMap.get(t.getTypeName()) == null) { + tableToPropertyMap.put(t.getTypeName(), Collections.EMPTY_LIST); + } + } + } + + } + + private Converter loadConverter(String converterName) { + if (converterName != null) { + + try { + Class converterClazz = Class.forName(converterName, true, + Thread.currentThread().getContextClassLoader()); + if (null != converterClazz) { + return (Converter) converterClazz.newInstance(); + } + + converterClazz = Class.forName(converterName); + if (converterClazz != null) { + return (Converter) converterClazz.newInstance(); + } + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } catch (IllegalAccessException ex) { + throw new RuntimeException(ex); + } catch (InstantiationException ex) { + throw new RuntimeException(ex); + } + } + return new DefaultConverter(); + } + + public String getColumnPropertyName(int i) { + return (String) propertyNames.get(i - 1); + } + + public String getDatabaseColumnName(int i) { + return resultSetShape.getColumnName(i); + } + + public String getTableName(String columnName) { + return (String) typeNames.get(propertyNames.indexOf(columnName)); + } + + public int getTableSize(String tableName) { + return ((Collection) tableToPropertyMap.get(tableName)).size(); + } + + public Type getDataType(String columnName) { + return resultSetShape.getColumnType(propertyNames.indexOf(columnName)); + } + + public String getTablePropertyName(int i) { + return (String) typeNames.get(i - 1); + } + + public Collection getAllTablePropertyNames() { + return tableToPropertyMap.keySet(); + } + + public String toString() { + + StringBuffer result = new StringBuffer(super.toString()); + result.append(" (Table Names: "); + Iterator i = typeNames.iterator(); + while (i.hasNext()) { + String tableName = (String) i.next(); + result.append(' '); + result.append(tableName); + result.append(','); + } + + result.append(" columnNames: "); + + i = propertyNames.iterator(); + while (i.hasNext()) { + String columnName = (String) i.next(); + result.append(' '); + result.append(columnName); + result.append(','); + } + + result.append(" mappingModel: "); + result.append(this.configWrapper.getConfig()); + + result.append(" resultSet: "); + result.append(resultSet); + + result.append(" resultSetSize: "); + result.append(resultSetShape.getColumnCount()); + result.append(')'); + return result.toString(); + + } + + /** + * @return + */ + public int getNumberOfTables() { + return tableToPropertyMap.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) { + + Table t = configWrapper.getTableByTypeName(getTablePropertyName(i)); + if (t == null) { + return true; + } + + // If no Columns have been defined, consider every column to be part of + // the PK + if (t.getColumn().isEmpty()) { + return true; + } + + Column c = configWrapper.getColumn(t, getDatabaseColumnName(i)); + + if (c == null) { + return false; + } + + if (c.isPrimaryKey()) { + return true; + } + + return false; + } + + /** + * @param i + * @return + */ + public Type getDataType(int i) { + return resultSetShape.getColumnType(i); + } + + /** + * @param tableName + * @return + */ + public Collection getPropertyNames(String tableName) { + return (Collection) tableToPropertyMap.get(tableName); + } + + public ResultSet getResultSet() { + return this.resultSet; + } + + public int getResultSetSize() { + return resultSetShape.getColumnCount(); + } + + public boolean isRecursive() { + return configWrapper.hasRecursiveRelationships(); + } + + public Converter getConverter(int i) { + return converters[i - 1]; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java new file mode 100644 index 0000000000..74a4627fa1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetProcessor.java @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +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 final Logger logger = LoggerFactory.INSTANCE.getLogger(ResultSetProcessor.class); + + private TableRegistry registry; + + private GraphBuilderMetadata metadata; + + 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); + + if (this.logger.isDebugEnabled()) { + this.logger.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 (!rawDataFromRow.hasValidPrimaryKey()) { + continue; + } + + String tableName = rawDataFromRow.getTableName(); + DataObject tableObject = registry.get(tableName, rawDataFromRow.getPrimaryKeyValues()); + if (tableObject == null) { + tableObject = doMaker.createAndAddDataObject(rawDataFromRow, resultMetadata); + + if (this.logger.isDebugEnabled()) { + this.logger.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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java new file mode 100644 index 0000000000..12a3e4b47f --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultSetRow.java @@ -0,0 +1,186 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +/** + * + * A ResultSetRow is used to transform a single row of a ResultSet into a set of EDataObjects. + */ +public class ResultSetRow { + private final Logger logger = LoggerFactory.INSTANCE.getLogger(ResultSetRow.class); + + private final ResultMetadata metadata; + + private Map tableMap = new HashMap(); + + private List allTableData; + + /** + * 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 { + + if (this.logger.isDebugEnabled()) { + this.logger.debug(""); + } + for (int i = 1; i <= metadata.getResultSetSize(); i++) { + Object data = getObject(rs, i); + + TableData table = getRawData(metadata.getTablePropertyName(i)); + if (this.logger.isDebugEnabled()) { + this.logger.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; + if (this.logger.isDebugEnabled()) { + this.logger.debug(""); + } + + while (i <= metadata.getResultSetSize()) { + if (this.logger.isDebugEnabled()) { + this.logger.debug(""); + } + TableData table = new TableData(metadata.getTablePropertyName(i)); + this.allTableData.add(table); + + while ((i <= metadata.getResultSetSize()) && (metadata.isPKColumn(i))) { + Object data = getObject(rs, i); + if (this.logger.isDebugEnabled()) { + this.logger.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); + if (this.logger.isDebugEnabled()) { + this.logger.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; + } + + 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 List getAllTableData() { + if (this.allTableData == null) { + this.allTableData = new ArrayList(); + this.allTableData.addAll(tableMap.values()); + } + + if (this.logger.isDebugEnabled()) { + this.logger.debug(allTableData); + } + + return this.allTableData; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java new file mode 100644 index 0000000000..64809f7996 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/RowObjects.java @@ -0,0 +1,146 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +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.LoggerFactory; + +import commonj.sdo.DataObject; +import commonj.sdo.Property; + +public class RowObjects { + private final Logger logger = LoggerFactory.INSTANCE.getLogger(RowObjects.class); + + private Map objectsByTableName; + + private List tableObjects; + + 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 = metadata.getConfigWrapper(); + if (wrapper.hasRecursiveRelationships()) { + processRecursiveRelationships(wrapper); + return; + } + + Iterator i = metadata.getRelationships().iterator(); + while (i.hasNext()) { + Relationship r = (Relationship) i.next(); + + DataObject parentTable = get(wrapper.getTableTypeName(r.getPrimaryKeyTable())); + DataObject childTable = get(wrapper.getTableTypeName(r.getForeignKeyTable())); + + if (this.logger.isDebugEnabled()) { + this.logger.debug("Parent table: " + parentTable); + this.logger.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) { + + List 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)); + } + + if (this.logger.isDebugEnabled()) { + this.logger.debug("Trying to find parent of " + r.getForeignKeyTable() + " with FK " + fkValue); + } + + DataObject parentTable = registry.get(r.getPrimaryKeyTable(), fkValue); + + if (this.logger.isDebugEnabled()) { + this.logger.debug("Parent table from registry: " + parentTable); + } + + return parentTable; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java new file mode 100644 index 0000000000..72040e9834 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/SingleTableRegistry.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 { + + + public SingleTableRegistry() { + // Empty Constructor + } + + public DataObject get(String tableName, List primaryKey) { + return null; + } + + + public void put(String tableName, List primaryKey, DataObject value) { + // do nothing + + } + + public boolean contains(String name, List list) { + return false; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java new file mode 100644 index 0000000000..35bfb591bd --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableData.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +/** + * + */ +public class TableData { + private final Logger logger = LoggerFactory.INSTANCE.getLogger(TableData.class); + + private Map columnData = new HashMap(); + + private List primaryKey = new ArrayList(); + + private final String name; + + private boolean hasValidPrimaryKey = true; + + public TableData(String tableName) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Creating TableData for table " + tableName); + } + + this.name = tableName; + } + + public void addData(String columnName, boolean isPrimaryKeyColumn, Object data) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Adding column " + columnName + " with value " + data); + } + + columnData.put(columnName, data); + if (isPrimaryKeyColumn) { + if (data == null) { + if (this.logger.isDebugEnabled()) { + this.logger.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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java new file mode 100644 index 0000000000..60759c90f4 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/TableRegistry.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 DataObject + */ + DataObject get(String tableName, List primaryKey); + + /** + * Add the table with the specified name and primary key + * + * @param tableName + * @param primaryKey + * @param value + */ + void put(String tableName, List primaryKey, DataObject value); + + boolean contains(String name, List list); +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java new file mode 100644 index 0000000000..1fb45243d0 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ResultSetTypeMap.java @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 final 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"); + } + return helper.getType("commonj.sdo", "boolean"); + + + case Types.TINYINT: + case Types.SMALLINT: + case Types.INTEGER: + if (isNullable) { + return helper.getType("commonj.sdo", "IntObject"); + } + + return helper.getType("commonj.sdo", "Int"); + + + case Types.BIGINT: + if (isNullable) { + return helper.getType("commonj.sdo", "Long"); + } + return helper.getType("commonj.sdo", "long"); + + case Types.REAL: + if (isNullable) { + return helper.getType("commonj.sdo", "Float"); + } + return helper.getType("commonj.sdo", "float"); + + + case Types.FLOAT: + case Types.DOUBLE: + if (isNullable) { + return helper.getType("commonj.sdo", "Double"); + } + 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java new file mode 100644 index 0000000000..c3b4617e7f --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ApplyChangesCommandImpl.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.log4j.Logger; +import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +import commonj.sdo.DataObject; + +/** + * + */ +public class ApplyChangesCommandImpl extends BaseCommandImpl { + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(ApplyChangesCommandImpl.class); + + private ChangeSummarizer summarizer = new ChangeSummarizer(); + + public ApplyChangesCommandImpl(MappingWrapper config, Connection connection) { + this.configWrapper = config; + if (connection != null) { + setConnection(connection, config.getConfig()); + } + + } + + public void setConnection(ConnectionImpl connection) { + summarizer.setConnection(connection); + } + + public void execute(DataObject root) { + if (this.logger.isDebugEnabled()) { + this.logger.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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java new file mode 100644 index 0000000000..d1b990d421 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/BaseCommandImpl.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.config.Config; +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, Config config) { + boolean managed = true; + if (config != null && config.getConnectionInfo() != null) { + managed = config.getConnectionInfo().isManagedtx(); + } + setConnection(connection, managed); + } + + public void setConnection(Connection connection, boolean manageTransaction) { + ConnectionImpl c = new ConnectionImpl(connection); + c.setManageTransactions(manageTransaction); + setConnection(c); + } + + public abstract void setConnection(ConnectionImpl c); + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java new file mode 100644 index 0000000000..c6628d3456 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java @@ -0,0 +1,179 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.log4j.Logger; +import org.apache.tuscany.das.rdb.config.Create; +import org.apache.tuscany.das.rdb.config.Delete; +import org.apache.tuscany.das.rdb.config.Table; +import org.apache.tuscany.das.rdb.config.Update; +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.DeleteGenerator; +import org.apache.tuscany.das.rdb.generator.impl.InsertGenerator; +import org.apache.tuscany.das.rdb.generator.impl.UpdateGenerator; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +import commonj.sdo.DataObject; + +public class ChangeFactory { + private final Logger logger = LoggerFactory.INSTANCE.getLogger(ChangeFactory.class); + + private InsertCommandImpl createCommand; + + private UpdateCommandImpl updateCommand; + + private DeleteCommandImpl deleteCommand; + + private final MappingWrapper mapping; + + private final ConnectionImpl connection; + + public ChangeFactory(MappingWrapper mapping, ConnectionImpl connection) { + this.mapping = mapping; + this.connection = connection; + } + + public void setCreateCommand(InsertCommandImpl cmd) { + createCommand = cmd; + } + + public void setUpdateCommand(UpdateCommandImpl cmd) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Setting Update Command to " + cmd); + } + + updateCommand = cmd; + } + + public void setDeleteCommand(DeleteCommandImpl cmd) { + deleteCommand = cmd; + } + + 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); + } + + private InsertCommandImpl getCreateCommand(DataObject changedObject) { + + if (createCommand == null) { + Table table = mapping.getTableByTypeName(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.getTableByTypeName(changedObject.getType().getName()); + } else { + throw new RuntimeException("Table " + changedObject.getType().getName() + + " was changed in the DataGraph but is not present in the Config"); + } + } + + Create create = table.getCreate(); + + if (create == null) { + createCommand = InsertGenerator.INSTANCE.getInsertCommand(mapping, changedObject, table); + } else { + createCommand = new InsertCommandImpl(create); + } + createCommand.setConnection(connection); + createCommand.configWrapper = mapping; + } + return createCommand; + } + + private DeleteCommandImpl getDeleteCommand(DataObject changedObject) { + + if (deleteCommand == null) { + Table table = mapping.getTableByTypeName(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.getTableByTypeName(changedObject.getType().getName()); + } else { + throw new RuntimeException("Table " + changedObject.getType().getName() + + " was changed in the DataGraph but is not present in the Config"); + } + } + + Delete delete = table.getDelete(); + + if (delete == null) { + deleteCommand = DeleteGenerator.INSTANCE.getDeleteCommand(table); + } else { + deleteCommand = new DeleteCommandImpl(delete); + } + deleteCommand.setConnection(connection); + deleteCommand.configWrapper = mapping; + } + return deleteCommand; + } + + private UpdateCommandImpl getUpdateCommand(DataObject changedObject) { + + if (updateCommand == null) { + Table table = mapping.getTableByTypeName(changedObject.getType().getName()); + if (table == null) { + if (changedObject.getType().getProperty("ID") != null) { + mapping.addPrimaryKey(changedObject.getType().getName() + ".ID"); + table = mapping.getTableByTypeName(changedObject.getType().getName()); + } else { + throw new RuntimeException("Table " + changedObject.getType().getName() + + " was changed in the DataGraph but is not present in the Config"); + } + } + Update update = table.getUpdate(); + if (update == null) { + updateCommand = UpdateGenerator.INSTANCE.getUpdateCommand(mapping, changedObject, table); + } else { + TableWrapper t = new TableWrapper(table); + if (t.getCollisionColumn() != null) { + updateCommand = new OptimisticWriteCommandImpl(update); + } else { + updateCommand = new UpdateCommandImpl(update); + } + } + updateCommand.setConnection(connection); + updateCommand.configWrapper = mapping; + } + if (this.logger.isDebugEnabled()) { + this.logger.debug("Returning updateCommand: " + updateCommand); + } + + return updateCommand; + } + + public MappingWrapper getConfig() { + return this.mapping; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java new file mode 100644 index 0000000000..ca44591213 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeOperation.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +import commonj.sdo.DataObject; + +/** + */ +public abstract class ChangeOperation { + protected DatabaseObject dObject; + + protected String propagatedID; + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(ChangeOperation.class); + + private final WriteCommandImpl writeCommand; + + private boolean isInsert; + + + 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() { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Executing change operation"); + } + + Iterator i = writeCommand.getParameters().iterator(); + while (i.hasNext()) { + ParameterImpl parm = (ParameterImpl) i.next(); + + if (this.logger.isDebugEnabled()) { + this.logger.debug("setting " + parm.getName() + " to " + dObject.get(parm.getName())); + } + + parm.setValue(dObject.get(parm.getName())); + } + + writeCommand.execute(); + + if (isInsert && (propagatedID != null)) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Propagating key " + propagatedID); + } + int id = writeCommand.getGeneratedKey(); + dObject.setPropagatedID(propagatedID, id); + } + } + + public String getTableName() { + return dObject.getTableName(); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java new file mode 100644 index 0000000000..49785b423d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeSummarizer.java @@ -0,0 +1,242 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.Command; +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.RelationshipWrapper; +import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper; +import org.apache.tuscany.das.rdb.util.LoggerFactory; +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 final Logger logger = LoggerFactory.INSTANCE.getLogger(ChangeSummarizer.class); + + private Changes changes = new Changes(); + + private FactoryRegistry registry; + + private MappingWrapper mapping = new MappingWrapper(); + + private ConnectionImpl connection; + + private Map 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(); + + if (this.logger.isDebugEnabled()) { + this.logger.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)) { + if (this.logger.isDebugEnabled()) { + this.logger.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()); + if (this.logger.isDebugEnabled()) { + this.logger.debug("Change is a delete"); + } + changes.addDelete(factory.createDeleteOperation(changedObject)); + } else { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Change is a modify"); + } + List attrList = changeSummary.getOldValues(changedObject); + if (hasAttributeChange(attrList)) { + ChangeFactory factory = getRegistry().getFactory(changedObject.getType()); + if (this.logger.isDebugEnabled()) { + this.logger.debug("Attribute Change for " + changedObject.getType().getName()); + } + String propagatedID = (String) generatedKeys.get(changedObject.getType().getName()); + changes.addUpdate(factory.createUpdateOperation(changedObject, propagatedID)); + } else { + List values = changeSummary.getOldValues(changedObject); + Iterator i = values.iterator(); + while (i.hasNext()) { + ChangeSummary.Setting setting = (ChangeSummary.Setting) i.next(); + if (!setting.getProperty().getType().isDataType()) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Reference change for " + changedObject.getType().getName()); + } + Property ref = setting.getProperty(); + if (this.logger.isDebugEnabled()) { + this.logger.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; + } + + 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()) { + if (rel.isKeyRestricted()) { + throw new RuntimeException("Can not modify a one to one relationship that is key restricted"); + } + // This is a one-one relationship + Table t = mapping.getTableByTypeName(changedObject.getType().getName()); + TableWrapper tw = new TableWrapper(t); + RelationshipWrapper rw = new RelationshipWrapper(rel); + if ((rel.getForeignKeyTable().equals(t.getTableName())) + && (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()) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("adding generated key " + t.getTableName() + "." + c.getColumnName()); + } + + generatedKeys.put(t.getTableName(), c.getColumnName()); + } + } + } + } + + public ConnectionImpl getConnection() { + return this.connection; + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java new file mode 100644 index 0000000000..2cc5f906c9 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Changes.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; + +/** + * Manages 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(List insertOrder) { + inserts.setOrder(insertOrder); + } + + public void setDeleteOrder(List deleteOrder) { + deletes.setOrder(deleteOrder); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java new file mode 100644 index 0000000000..8c5658935f --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandImpl.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 commonj.sdo.DataObject; +import commonj.sdo.helper.XSDHelper; + +public abstract class CommandImpl extends BaseCommandImpl implements Command { + + protected Statement statement; + + protected Parameters parameters = new Parameters(); + + + + 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 setParameter(int index, Object value) { + parameters.setParameter(index, value); + } + + public void addParameter(ParameterImpl param) { + parameters.add(param); + } + + public List getParameters() { + return parameters.parameterList(); + } + + public Object getParameter(int index) { + return parameters.parameterWithIndex(index).getValue(); + } + + public void setConnection(ConnectionImpl connection) { + statement.setConnection(connection); + } + + protected ConnectionImpl getConnection() { + return statement.getConnection(); + } + + /* + * The default impl is to throw an exception. This is overridden by InsertCommandImpl + */ + public int getGeneratedKey() { + + throw new RuntimeException("This method is only valid for insert commands"); + } + + public void close() { + statement.close(); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java new file mode 100644 index 0000000000..d3a2c77844 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DatabaseMetaData; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +public class ConnectionImpl { + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(ConnectionImpl.class); + + private Connection connection; + + private boolean managingTransaction = true; + + private final boolean useGetGeneratedKeys; + + public ConnectionImpl(Connection connection) { + this.connection = connection; + + try { + DatabaseMetaData dbmd = connection.getMetaData(); + + if (dbmd.getDatabaseProductName().contains("Oracle")) { + this.useGetGeneratedKeys = false; + } else { + this.useGetGeneratedKeys = true; + } + 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) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Committing Transaction"); + } + connection.commit(); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public void errorCleanUp() { + try { + if (managingTransaction) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Rolling back Transaction"); + } + connection.rollback(); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public PreparedStatement prepareStatement(String queryString, String[] returnKeys) throws SQLException { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Preparing Statement: " + queryString); + } + + if (useGetGeneratedKeys) { + return connection.prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS); + } else if (returnKeys.length > 0) { + return connection.prepareStatement(queryString, returnKeys); + } + + return connection.prepareStatement(queryString); + } + + public PreparedStatement preparePagedStatement(String queryString) throws SQLException { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Preparing Statement: " + queryString); + } + + return connection.prepareStatement(queryString, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + } + + public void setManageTransactions(boolean manageTransactions) { + managingTransaction = manageTransactions; + + } + + public CallableStatement prepareCall(String queryString) throws SQLException { + return connection.prepareCall(queryString); + } + + public boolean useGetGeneratedKeys() { + return this.useGetGeneratedKeys; + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java new file mode 100644 index 0000000000..0163f96686 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CreateOperation.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java new file mode 100644 index 0000000000..ba80b3bcb5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASFactoryImpl.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.DASFactory; +import org.apache.tuscany.das.rdb.config.Config; + +public class DASFactoryImpl implements DASFactory { + + public DAS createDAS(InputStream configStream) { + return new DASImpl(configStream); + } + + public DAS createDAS(Config config) { + return new DASImpl(config); + } + + public DAS createDAS(InputStream configStream, Connection connection) { + return new DASImpl(configStream, connection); + } + + public DAS createDAS(Config config, Connection connection) { + return new DASImpl(config, connection); + } + + public DAS createDAS(Connection connection) { + return new DASImpl(connection); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java new file mode 100644 index 0000000000..55f8e2c83b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java @@ -0,0 +1,247 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.SQLException; +import java.util.Collections; +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.Command; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.config.Config; +import org.apache.tuscany.das.rdb.config.ConfigFactory; +import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.util.ConfigUtil; + +import commonj.sdo.DataObject; + +/** + * An ConfiguredCommandFactory produces instances of Command and ApplyChangesCommand. This + * factory is initialized with a configuration that defines + * the commands it produces. + * + */ +public class DASImpl implements DAS { + + private MappingWrapper configWrapper; + + private Connection connection; + + private Map commands = new HashMap(); + + public DASImpl(InputStream stream) { + this(ConfigUtil.loadConfig(stream)); + + } + + public DASImpl(Config inConfig) { + Config cfg = inConfig; + if (cfg == null) { + cfg = ConfigFactory.INSTANCE.createConfig(); + } + this.configWrapper = new MappingWrapper(cfg); + + Iterator i = configWrapper.getConfig().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")) { + commands + .put(commandConfig.getName(), new ReadCommandImpl(commandConfig.getSQL(), + configWrapper, commandConfig.getResultDescriptor())); + } 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(), new String[0])); + } else if (kind.equalsIgnoreCase("delete")) { + commands.put(commandConfig.getName(), new DeleteCommandImpl(commandConfig.getSQL())); + } else if (kind.equalsIgnoreCase("procedure")) { + commands.put(commandConfig.getName(), new SPCommandImpl(commandConfig.getSQL(), + configWrapper, commandConfig.getParameter())); + } else { + throw new RuntimeException("Invalid kind of command: " + kind); + } + + } + + } + + public DASImpl(Config inConfig, Connection inConnection) { + this(inConfig); + setConnection(inConnection); + } + + public DASImpl(InputStream configStream, Connection inConnection) { + this(ConfigUtil.loadConfig(configStream), inConnection); + } + + public DASImpl(Connection inConnection) { + this(ConfigFactory.INSTANCE.createConfig()); + setConnection(inConnection); + } + + /* + * (non-Javadoc) + * + * @see org.apache.tuscany.das.rdb.CommandGroup#getApplyChangesCommand() + */ + public ApplyChangesCommandImpl getApplyChangesCommand() { + ApplyChangesCommandImpl cmd = new ApplyChangesCommandImpl(configWrapper, 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); + } + CommandImpl cmd = (CommandImpl) commands.get(name); + cmd.setConnection(getConnection(), configWrapper.getConfig()); + return cmd; + } + + public void setConnection(Connection connection) { + this.connection = connection; + } + + public Connection getConnection() { + if (connection == null) { + initializeConnection(); + } + return connection; + } + + private void initializeConnection() { + Config config = configWrapper.getConfig(); + if (config == null || config.getConnectionInfo() == null + || config.getConnectionInfo().getDataSource() == null) { + throw new RuntimeException("No connection has been provided and no data source has been specified"); + } + + Connection connection = null; + + InitialContext ctx; + try { + ctx = new InitialContext(); + } catch (NamingException e) { + throw new RuntimeException(e); + } + try { + DataSource ds = (DataSource) ctx.lookup(configWrapper.getConfig().getConnectionInfo().getDataSource()); + try { + connection = ds.getConnection(); + if (connection == null) { + throw new RuntimeException("Could not obtain a Connection from DataSource"); + } + connection.setAutoCommit(false); + setConnection(connection); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } catch (NamingException e) { + throw new RuntimeException(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 "managing" the connection via DataSource + */ + private boolean managingConnections() { + + if (configWrapper.getConfig().getConnectionInfo().getDataSource() == null) { + return false; + } + + return true; + + } + + public Command createCommand(String sql) { + return baseCreateCommand(sql, this.configWrapper); + } + + public Command createCommand(String sql, Config config) { + return baseCreateCommand(sql, new MappingWrapper(config)); + } + + private Command baseCreateCommand(String inSql, MappingWrapper config) { + CommandImpl returnCmd = null; + String sql = inSql.trim(); // Remove leading white space + char firstChar = Character.toUpperCase(sql.charAt(0)); + switch (firstChar) { + case 'S': + returnCmd = new ReadCommandImpl(sql, config, null); + break; + case 'I': + returnCmd = new InsertCommandImpl(sql, new String[0]); + break; + case 'U': + returnCmd = new UpdateCommandImpl(sql); + break; + case 'D': + returnCmd = new DeleteCommandImpl(sql); + break; + case '{': + returnCmd = new SPCommandImpl(sql, config, Collections.EMPTY_LIST); + break; + default: + throw new RuntimeException("SQL => " + sql + " is not valid"); + } + + returnCmd.setConnection(getConnection(), config.getConfig()); + return returnCmd; + } + + public void applyChanges(DataObject root) { + getApplyChangesCommand().execute(root); + } + +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java new file mode 100644 index 0000000000..de42b595b4 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java @@ -0,0 +1,162 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.Map; + +import org.apache.log4j.Logger; +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.LoggerFactory; + +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 Logger logger = LoggerFactory.INSTANCE.getLogger(DatabaseObject.class); + + private final MappingWrapper mappingWrapper; + + private final DataObject dataObject; + + private Property parentReference; + + private Map 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(); + if (this.logger.isDebugEnabled()) { + this.logger.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.getTableByTypeName(getTypeName()).getTableName(); + } + 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java new file mode 100644 index 0000000000..78e38cee0b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteCommandImpl.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.config.Delete; + +public class DeleteCommandImpl extends WriteCommandImpl { + + public DeleteCommandImpl(String sqlString) { + super(sqlString); + } + + public DeleteCommandImpl(Delete delete) { + super(delete.getSql()); + addParameters(delete.getParameters()); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java new file mode 100644 index 0000000000..feb7e31411 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteList.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; +import java.util.Map; + +/** + * DeleteList will sort delete operations so that child objects are deleted before their parents + * + * + */ +public class DeleteList { + + private Map opsByTableName = new HashMap(); + + private List order; + + private List deleteOperations = new ArrayList(); + + public DeleteList() { + super(); + } + + public void add(ChangeOperation op) { + if ((order.size() == 0) || (op.getTableName() == null)) { + deleteOperations.add(op); + } else { + String name = op.getTableName(); + List ops = (List) opsByTableName.get(name); + if (ops == null) { + ops = new ArrayList(); + } + ops.add(op); + opsByTableName.put(name, ops); + } + } + + public Collection getSortedList() { + if ((order.size() > 0) && (opsByTableName.keySet().size() > 0)) { + Iterator i = this.order.iterator(); + while (i.hasNext()) { + String name = (String) i.next(); + if (opsByTableName.get(name) != null) { + deleteOperations.addAll((Collection) opsByTableName.get(name)); + } + } + } + + return deleteOperations; + } + + public void setOrder(List deleteOrder) { + this.order = deleteOrder; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java new file mode 100644 index 0000000000..52935599c1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DeleteOperation.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java new file mode 100644 index 0000000000..9e4a4b47b5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/FactoryRegistry.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Map; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +import commonj.sdo.Type; + +public class FactoryRegistry { + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(FactoryRegistry.class); + + private Map registry = new HashMap(); + + 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) { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Creating new ChangeFactory for type " + type.getName()); + } + + factory = new ChangeFactory(mapping, connection); + registry.put(type, factory); + } + return factory; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java new file mode 100644 index 0000000000..048ee7fef5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertCommandImpl.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.tuscany.das.rdb.config.Create; + +public class InsertCommandImpl extends WriteCommandImpl { + + private String[] keys; + + public InsertCommandImpl(String sqlString, String[] generatedKeys) { + super(sqlString); + keys = generatedKeys; + } + + public InsertCommandImpl(Create create) { + super(create.getSql()); + addParameters(create.getParameters()); + this.keys = new String[0]; + } + + public void execute() { + + boolean success = false; + try { + statement.executeUpdate(parameters, keys); + success = true; + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + if (success) { + statement.getConnection().cleanUp(); + } else { + statement.getConnection().errorCleanUp(); + } + } + + } + + public int getGeneratedKey() { + try { + return statement.getGeneratedKey(); + } catch (SQLException ex) { + throw new RuntimeException(ex); + } + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java new file mode 100644 index 0000000000..dea65feb3c --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/InsertList.java @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +/** + * InsertList will sort ChangeOperation objects so that parents are inserted before children + * + * + */ +public class InsertList { + private final Logger logger = LoggerFactory.INSTANCE.getLogger(InsertList.class); + + private Map opsByTableName = new HashMap(); + + private List insertOperations = new ArrayList(); + + private List order; + + public void add(ChangeOperation op) { + if (this.logger.isDebugEnabled()) { + this.logger.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(); + List ops = (List) opsByTableName.get(name); + if (ops == null) { + ops = new ArrayList(); + } + + ops.add(op); + opsByTableName.put(name, ops); + } + } + + public Collection getSortedList() { + if (this.logger.isDebugEnabled()) { + this.logger.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(); + if (this.logger.isDebugEnabled()) { + this.logger.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)); + } + } + } + if (this.logger.isDebugEnabled()) { + this.logger.debug("Returning " + insertOperations.size() + " insert operations"); + } + + return insertOperations; + } + + public void setOrder(List insertOrder) { + this.order = insertOrder; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java new file mode 100644 index 0000000000..d91200fd03 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ManagedParameterImpl.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.math.BigDecimal; + +public class ManagedParameterImpl extends ParameterImpl { + + public void setValue(Object oldValue) { + this.value = updateValue(oldValue); + } + + private Object updateValue(Object oldValue) { + if (oldValue instanceof Integer) { + return Integer.valueOf(((Integer) oldValue).intValue() + 1); + } else if (oldValue instanceof BigDecimal) { + return ((BigDecimal) oldValue).add(new BigDecimal(1)); + } else { + throw new RuntimeException("Unsupported type for managed column: " + oldValue.getClass().getName()); + } + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java new file mode 100644 index 0000000000..a1ced26ecf --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/OptimisticWriteCommandImpl.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.tuscany.das.rdb.config.Update; + +public class OptimisticWriteCommandImpl extends UpdateCommandImpl { + + public OptimisticWriteCommandImpl(String sqlString) { + super(sqlString); + } + + public OptimisticWriteCommandImpl(Update update) { + super(update); + addParameters(update.getParameters()); + } + + public void execute() { + + boolean success = false; + try { + int rowsAffected = statement.executeUpdate(parameters); + success = true; + if (rowsAffected == 0) { + throw new RuntimeException("An update collision occurred"); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + if (success) { + statement.getConnection().cleanUp(); + } else { + statement.getConnection().errorCleanUp(); + } + } + + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java new file mode 100644 index 0000000000..27b653763b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/PagerImpl.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java new file mode 100644 index 0000000000..3e23faf069 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ParameterImpl.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 commonj.sdo.Type; + +public class ParameterImpl { + + /** + * Value for "Direction" that indicates that a parameter is soley for input. + */ + static final int IN = 1; + + /** + * Value for "Direction" that indicates that a parameter is soley for output. + * Out parameters only apply to Stored Procedures + */ + static final 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 + */ + static final int IN_OUT = 3; + + protected Object value; + + private int index; + + private Type type; + + private String name; + + private int direction = IN; + + private Converter converter; + + + public ParameterImpl() { + super(); + } + + 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); + } + + return this.value; + } + + public int getDirection() { + return this.direction; + } + + public void setConverter(Converter converter) { + this.converter = converter; + } + + public Converter getConverter() { + return this.converter; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java new file mode 100644 index 0000000000..3f38687942 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Parameters.java @@ -0,0 +1,114 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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; +import java.util.List; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +import commonj.sdo.Type; + +public class Parameters { + private final Logger logger = LoggerFactory.INSTANCE.getLogger(Parameters.class); + + private List parameters = new ArrayList(); + + private List inParams = new ArrayList(); + + private List outParams = new ArrayList(); + + public Parameters() { + super(); + } + + public ParameterImpl get(int index) { + return (ParameterImpl) parameters.get(index); + } + + public List outParams() { + return outParams; + } + + public List inParams() { + return inParams; + } + + private void addParameter(ParameterImpl param) { + if (param.getDirection() == ParameterImpl.IN) { + inParams.add(param); + } else if ((param.getDirection() == ParameterImpl.OUT) || (param.getDirection() == ParameterImpl.IN_OUT)) { + outParams.add(param); + } + + this.parameters.add(param); + } + + public void add(ParameterImpl param) { + addParameter(param); + } + + public ParameterImpl findOrCreateParameterWithIndex(int index, int direction, Type sdoType) { + Iterator i = parameters.iterator(); + while (i.hasNext()) { + ParameterImpl param = (ParameterImpl) i.next(); + + if (param.getIndex() == index) { + return param; + } + } + if (this.logger.isDebugEnabled()) { + this.logger.debug("Creating new parameter with index " + index); + } + + ParameterImpl newParam = new ParameterImpl(index); + newParam.setDirection(direction); + newParam.setType(sdoType); + addParameter(newParam); + return newParam; + } + + public List parameterList() { + return parameters; + } + + public ParameterImpl findOrCreateParameterWithIndex(int index) { + return findOrCreateParameterWithIndex(index, ParameterImpl.IN, null); + } + + public void setParameter(int index, Object value) { + ParameterImpl param = findOrCreateParameterWithIndex(index); + param.setValue(value); + } + + public ParameterImpl parameterWithIndex(int index) { + Iterator i = parameters.iterator(); + while (i.hasNext()) { + ParameterImpl param = (ParameterImpl) i.next(); + + if (param.getIndex() == index) { + return param; + } + } + return null; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java new file mode 100644 index 0000000000..725285048d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java @@ -0,0 +1,124 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.List; + +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; + +public class ReadCommandImpl extends CommandImpl { + + private int startRow = 1; + + private int endRow = Integer.MAX_VALUE; + + public ReadCommandImpl(String sqlString, MappingWrapper mapping, List resultDescriptor) { + super(sqlString); + this.configWrapper = mapping; + + if (resultDescriptor != null && !resultDescriptor.isEmpty()) { + this.resultSetShape = new ResultSetShape(resultDescriptor); + } + } + + + 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 { + List results = statement.executeQuery(parameters); + success = true; + return buildGraph(results); + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + if (success) { + statement.getConnection().cleanUp(); + } else { + statement.getConnection().errorCleanUp(); + } + } + } + + protected DataObject buildGraph(List results) throws SQLException { + + // Before we use the mappingModel, do some checking/updating. If + // inferrable information + // isn't specified, add it in. + + GraphBuilderMetadata gbmd = new GraphBuilderMetadata(results, configWrapper.getConfig(), + resultSetShape); + + // Create the DataGraph + DataGraph g = SDOUtil.createDataGraph(); + + // Create the root object + g.createRootObject(gbmd.getRootType()); + + SDOUtil.registerDataGraphTypes(g, gbmd.getDefinedTypes()); + + ChangeSummary summary = g.getChangeSummary(); + + ResultSetProcessor rsp = new ResultSetProcessor(g.getRootObject(), gbmd); + rsp.processResults(getStartRow(), getEndRow()); + + summary.beginLogging(); + + return g.getRootObject(); + } + + + 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; + } + + + protected void enablePaging() { + statement.enablePaging(); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java new file mode 100644 index 0000000000..a47b7cd7be --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ResultSetMetaData; +import java.sql.SQLException; +import java.util.List; + +import org.apache.tuscany.das.rdb.config.ResultDescriptor; +import org.apache.tuscany.das.rdb.graphbuilder.schema.ResultSetTypeMap; + +import commonj.sdo.Type; +import commonj.sdo.helper.TypeHelper; + +/** + * 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. + *

+ * 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(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 ResultSetShape(List resultDescriptor) { + TypeHelper helper = TypeHelper.INSTANCE; + int size = resultDescriptor.size(); + columns = new String[size]; + tables = new String[size]; + types = new Type[size]; + + for (int i = 0; i < size; i++) { + ResultDescriptor desc = (ResultDescriptor) resultDescriptor.get(i); + tables[i] = desc.getTableName(); + columns[i] = desc.getColumnName(); + + int idx = desc.getColumnType().lastIndexOf('.'); + String uri = desc.getColumnType().substring(0, idx); + String typeName = desc.getColumnType().substring(idx + 1); + + types[i] = helper.getType(uri, typeName); + if (types[i] == null) { + throw new RuntimeException("Could not find type " + desc.getColumnType() + + " for column " + desc.getColumnName()); + } + } + + } + + 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java new file mode 100644 index 0000000000..1038c9a99a --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypeHelper.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 commonj.sdo.Type; + +public final class SDODataTypeHelper { + + private SDODataTypeHelper() { + + } + + public static int sqlTypeFor(Type sdoType) { + if (sdoType == null) { + return Types.OTHER; + } + + 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java new file mode 100644 index 0000000000..2052950272 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SDODataTypes.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Type; +import commonj.sdo.helper.TypeHelper; + +/** + * Defines SDO data types. This is used primalirly to type stored procedure OUT parameters. + * + */ +public class SDODataTypes { + + public static final TypeHelper TYPE_HELPER = TypeHelper.INSTANCE; + + public static final Type BOOLEAN = TYPE_HELPER.getType("commonj.sdo", "Boolean"); + + public static final Type BYTE = TYPE_HELPER.getType("commonj.sdo", "Byte"); + + public static final Type BYTES = TYPE_HELPER.getType("commonj.sdo", "Bytes"); + + public static final Type CHARACTER = TYPE_HELPER.getType("commonj.sdo", "Character"); + + public static final Type DATE = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type DATETIME = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type DAY = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type DECIMAL = TYPE_HELPER.getType("commonj.sdo", "Float"); + + public static final Type DOUBLE = TYPE_HELPER.getType("commonj.sdo", "Double"); + + public static final Type DURATION = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type FLOAT = TYPE_HELPER.getType("commonj.sdo", "Float"); + + public static final Type INT = TYPE_HELPER.getType("commonj.sdo", "Int"); + + public static final Type INTEGER = TYPE_HELPER.getType("commonj.sdo", "Integer"); + + public static final Type LONG = TYPE_HELPER.getType("commonj.sdo", "Long"); + + public static final Type MONTH = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type MONTHDAY = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type OBJECT = TYPE_HELPER.getType("commonj.sdo", "Object"); + + public static final Type SHORT = TYPE_HELPER.getType("commonj.sdo", "Short"); + + public static final Type STRING = TYPE_HELPER.getType("commonj.sdo", "String"); + + public static final Type STRINGS = TYPE_HELPER.getType("commonj.sdo", "String"); + + public static final Type TIME = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type URI = TYPE_HELPER.getType("commonj.sdo", "String"); + + public static final Type YEAR = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type YEARMONTH = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type YEARMONTHDAY = TYPE_HELPER.getType("commonj.sdo", "Date"); + + public static final Type BOOLEANOBJECT = TYPE_HELPER.getType("commonj.sdo", "BooleanObject"); + + public static final Type BYTEOBJECT = TYPE_HELPER.getType("commonj.sdo", "ByteObject"); + + public static final Type CHARACTEROBJECT = TYPE_HELPER.getType("commonj.sdo", "CharacterObject"); + + public static final Type DOUBLEOBJECT = TYPE_HELPER.getType("commonj.sdo", "DoubleObject"); + + public static final Type FLOATOBJECT = TYPE_HELPER.getType("commonj.sdo", "FloatObject"); + + public static final Type INTEGEROBJECT = TYPE_HELPER.getType("commonj.sdo", "IntObject"); + + public static final Type LONGOBJECT = TYPE_HELPER.getType("commonj.sdo", "LongObject"); + + public static final Type SHORTOBJECT = TYPE_HELPER.getType("commonj.sdo", "ShortObject"); + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java new file mode 100644 index 0000000000..676fb215b6 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Iterator; +import java.util.List; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.config.Parameter; +import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.TypeHelper; + +public class SPCommandImpl extends ReadCommandImpl { + private final Logger logger = LoggerFactory.INSTANCE.getLogger(SPCommandImpl.class); + + public SPCommandImpl(String sqlString, MappingWrapper config, List params) { + super(sqlString, config, null); + Iterator i = params.iterator(); + for (int idx = 1; i.hasNext(); idx++) { + Parameter p = (Parameter) i.next(); + + int index = p.getColumnType().lastIndexOf('.'); + String pkg = p.getColumnType().substring(0, index); + String typeName = p.getColumnType().substring(index + 1); + + Type sdoType = TypeHelper.INSTANCE.getType(pkg, typeName); + + int direction = ParameterImpl.IN; + if ("OUT".equalsIgnoreCase(p.getDirection())) { + direction = ParameterImpl.OUT; + } else if ("INOUT".equalsIgnoreCase(p.getDirection())) { + direction = ParameterImpl.IN_OUT; + } + parameters.findOrCreateParameterWithIndex(idx, direction, sdoType); + } + + } + + public DataObject executeQuery() { + + boolean success = false; + try { + List results = statement.executeCall(parameters); + success = true; + + return buildGraph(results); + } catch (SQLException e) { + if (this.logger.isDebugEnabled()) { + this.logger.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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java new file mode 100644 index 0000000000..4740684fbc --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java @@ -0,0 +1,234 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ParameterMetaData; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import org.apache.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +// TODO - Can use some refactoring. Much code is duplicated in "execute" methods +public class Statement { + + protected final String queryString; + + protected ConnectionImpl jdbcConnection; + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(Statement.class); + + private PreparedStatement preparedStatement; + + private boolean isPaging; + + public Statement(String sqlString) { + this.queryString = sqlString; + } + + public List executeQuery(Parameters parameters) throws SQLException { + + PreparedStatement ps = getPreparedStatement(new String[0]); + ps = setParameters(ps, parameters); + ResultSet rs = ps.executeQuery(); + + return Collections.singletonList(rs); + } + + public List executeCall(Parameters parameters) throws SQLException { + + CallableStatement cs = jdbcConnection.prepareCall(queryString); + + Iterator inParams = parameters.inParams().iterator(); + while (inParams.hasNext()) { + ParameterImpl param = (ParameterImpl) inParams.next(); + cs.setObject(param.getIndex(), param.getValue()); + } + + // register out parameters + Iterator outParams = parameters.outParams().iterator(); + while (outParams.hasNext()) { + ParameterImpl param = (ParameterImpl) outParams.next(); + if (this.logger.isDebugEnabled()) { + this.logger.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(); + List results = new ArrayList(); + results.add(cs.getResultSet()); + while (cs.getMoreResults(java.sql.Statement.KEEP_CURRENT_RESULT)) { + results.add(cs.getResultSet()); + } + + Iterator i = parameters.outParams().iterator(); + while (i.hasNext()) { + ParameterImpl param = (ParameterImpl) i.next(); + param.setValue(cs.getObject(param.getIndex())); + } + + return results; + + } + + public void executeUpdateCall(Parameters parameters) throws SQLException { + CallableStatement cs = jdbcConnection.prepareCall(queryString); + + Iterator inParams = parameters.inParams().iterator(); + while (inParams.hasNext()) { + ParameterImpl param = (ParameterImpl) inParams.next(); + cs.setObject(param.getIndex(), param.getValue()); + } + + // register out parameters + Iterator outParams = parameters.outParams().iterator(); + while (outParams.hasNext()) { + ParameterImpl param = (ParameterImpl) outParams.next(); + + if (this.logger.isDebugEnabled()) { + this.logger.debug("Registering parameter " + param.getName()); + } + + cs.registerOutParameter(param.getIndex(), SDODataTypeHelper.sqlTypeFor(param.getType())); + } + + cs.execute(); + + Iterator out = parameters.outParams().iterator(); + while (out.hasNext()) { + ParameterImpl param = (ParameterImpl) out.next(); + param.setValue(cs.getObject(param.getIndex())); + } + + } + + public int executeUpdate(Parameters parameters, String[] generatedKeys) throws SQLException { + return executeUpdate(getPreparedStatement(generatedKeys), parameters); + } + + public int executeUpdate(Parameters parameters) throws SQLException { + return executeUpdate(parameters, new String[0]); + } + + /** + * TODO - We need to look at using specific ps.setXXX methods when a type + * has been specified and try setObject otherwise. + */ + private int executeUpdate(PreparedStatement ps, Parameters parameters) throws SQLException { + if (this.logger.isDebugEnabled()) { + this.logger.debug("Executing statement " + queryString); + } + + Iterator i = parameters.inParams().iterator(); + while (i.hasNext()) { + ParameterImpl param = (ParameterImpl) i.next(); + + Object value = param.getValue(); + if (this.logger.isDebugEnabled()) { + this.logger.debug("Setting parameter " + param.getIndex() + " to " + value); + } + + if (value == null) { + if (param.getType() == null) { + try { + ParameterMetaData pmd = ps.getParameterMetaData(); + ps.setNull(param.getIndex(), pmd.getParameterType(param.getIndex())); + } catch (SQLException ex) { + ps.setNull(param.getIndex(), SDODataTypeHelper.sqlTypeFor(null)); + } + } else { + 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()) { + ParameterImpl param = (ParameterImpl) i.next(); + 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(String[] returnKeys) throws SQLException { + + if (preparedStatement == null) { + if (isPaging) { + preparedStatement = jdbcConnection.preparePagedStatement(queryString); + } else { + preparedStatement = jdbcConnection.prepareStatement(queryString, returnKeys); + } + } + + return preparedStatement; + } + + public Integer getGeneratedKey() throws SQLException { + + if (getConnection().useGetGeneratedKeys()) { + ResultSet rs = preparedStatement.getGeneratedKeys(); + if (rs.next()) { + return Integer.valueOf(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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java new file mode 100644 index 0000000000..11a78bb5d1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateCommandImpl.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.config.Update; + +public class UpdateCommandImpl extends WriteCommandImpl { + + public UpdateCommandImpl(String sqlString) { + super(sqlString); + } + + public UpdateCommandImpl(Update update) { + super(update.getSql()); + addParameters(update.getParameters()); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java new file mode 100644 index 0000000000..e7bb58698c --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateList.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.List; + +/** + * Updates don't have to be sorted, so this class is a simple wrapper of ArrayList. + * + */ +public class UpdateList { + + private List updates = new ArrayList(); + + public UpdateList() { + super(); + } + + public void add(ChangeOperation c) { + updates.add(c); + } + + public Collection getSortedList() { + return updates; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java new file mode 100644 index 0000000000..1bcf3441b6 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/UpdateOperation.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java new file mode 100644 index 0000000000..a1efe3afee --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/WriteCommandImpl.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.StringTokenizer; + +import org.apache.tuscany.das.rdb.config.Config; + +import commonj.sdo.DataObject; + +public abstract class WriteCommandImpl extends CommandImpl { + + + public WriteCommandImpl(String sqlString) { + super(sqlString); + } + + public void execute() { + + boolean success = false; + try { + statement.executeUpdate(parameters); + 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(); + } + + public String toString() { + + StringBuffer buffer = new StringBuffer(); + buffer.append("\nSQL: " + statement.queryString); + + return buffer.toString(); + } + + public int getGeneratedKey() { + throw new RuntimeException("No generated key is available"); + } + + public void addParameters(String parameters) { + StringTokenizer tokenizer = new StringTokenizer(parameters); + for (int idx = 1; tokenizer.hasMoreTokens(); idx++) { + ParameterImpl p = new ParameterImpl(); + p.setName(tokenizer.nextToken()); + p.setIndex(idx); + addParameter(p); + } + } + + + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java new file mode 100644 index 0000000000..a3389b9721 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java @@ -0,0 +1,195 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Map; +import java.util.logging.Logger; + +import org.apache.tuscany.das.rdb.config.Config; +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 org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.ChangeSummary; +import commonj.sdo.DataGraph; +import commonj.sdo.DataObject; +import commonj.sdo.Property; +import commonj.sdo.Type; +import commonj.sdo.helper.TypeHelper; + +public class GraphMerger { + + private static Logger logger = Logger.getLogger("GraphMerger"); + + private Map keys = new HashMap(); + + private TableRegistry registry = new MultiTableRegistry(); + + // TODO lots of cleanup/design + public GraphMerger() { + // Empty Constructor + } + + // TODO Replace EMF reference with SDOUtil function when available + // (Tuscany-583) + public DataObject emptyGraph(Config config) { + + if (config.getDataObjectModel() == null) { + throw new RuntimeException("DataObjectModel must be specified in the Config"); + } + + String uri = "http:///org.apache.tuscany.das.rdb/das"; + TypeHelper typeHelper = SDOUtil.createTypeHelper(); + Type rootType = SDOUtil.createType(typeHelper, uri + "/DataGraphRoot", "DataGraphRoot", false); + + List types = SDOUtil.getTypes(typeHelper, config.getDataObjectModel()); + if (types == null) { + throw new RuntimeException("SDO Types have not been registered for URI " + config.getDataObjectModel()); + } + + Iterator i = types.iterator(); + while (i.hasNext()) { + Type type = (Type) i.next(); + Property property = SDOUtil.createProperty(rootType, type.getName(), type); + SDOUtil.setContainment(property, true); + SDOUtil.setMany(property, true); + } + + // Create the DataGraph + DataGraph g = SDOUtil.createDataGraph(); + + // Create the root object + g.createRootObject(rootType); + + ChangeSummary summary = g.getChangeSummary(); + summary.beginLogging(); + + return g.getRootObject(); + } + + 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))) { + 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 = 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java new file mode 100644 index 0000000000..e3ae306485 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/ConfigUtil.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 final class ConfigUtil { + + private ConfigUtil() { + + } + + public static Config loadConfig(InputStream configStream) { + + if (configStream == null) { + throw new RuntimeException("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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java new file mode 100644 index 0000000000..b9649669e5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/DataObjectUtil.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 final class DataObjectUtil { + + private 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/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java new file mode 100644 index 0000000000..bcd4386415 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerFactory.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 necessary log4j API classes */ +import org.apache.log4j.Appender; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Layout; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; + +/** + * Helper class for logging using external log utility : log4j + * This will use log4j and to configure it, please add/update log4j.properties + * + * @author lresende + */ + +public final class LoggerFactory { + public static final LoggerFactory INSTANCE = new LoggerFactory(); + + private static Layout defaultLayout; + + private static Appender defaultAppender; + + static { + synchronized (LoggerFactory.class) { + defaultLayout = new PatternLayout(LoggerLayout.layout()); + defaultAppender = new ConsoleAppender(defaultLayout); + } + } + + private LoggerFactory() { + + } + + public Logger getLogger(Class loggingClass) { + Logger logger = Logger.getLogger(loggingClass); + logger.setLevel(Level.OFF); + logger.addAppender(defaultAppender); + + return logger; + } + + public Logger getLogger(Class loggingClass, Level logLevel) { + Logger logger = Logger.getLogger(loggingClass); + logger.setLevel(logLevel); + logger.addAppender(defaultAppender); + + return logger; + } + + public static void main(String[] args) { + + Logger log = LoggerFactory.INSTANCE.getLogger(LoggerFactory.class); + if (log.isDebugEnabled()) { + log.debug("something"); + } + + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java new file mode 100644 index 0000000000..f34330be48 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/java/org/apache/tuscany/das/rdb/util/LoggerLayout.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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; + +/** + * Log4J layout helper for Tuscany DAS + * @author lresende + */ +public final class LoggerLayout { + + private LoggerLayout() { + + } + + public static String layout() { + + /* + * Substitute symbols + * %c Logger, %c{2 } last 2 partial names + * %C Class name (full agony), %C{2 } last 2 partial names + * %d{dd MMM yyyy HH:MM:ss } Date, format see java.text.SimpleDateFormat + * %F File name + * %l Location (caution: compiler-option-dependently) + * %L Line number + * %m user-defined message + * %M Method name + * %p Level + * %r Milliseconds since program start + * %t Threadname + * %x, %X see Doku + * %% individual percentage sign + * + * Caution: %C, %F, %l, %L, %M slow down program run! + * Note, %n is newline + */ + + return "[DAS RDB] - %c{1}.%M (%L) : %m %n"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/LICENSE.txt b/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/LICENSE.txt new file mode 100644 index 0000000000..25d78feeac --- /dev/null +++ b/das-java/branches/das-java-M2/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/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/MANIFEST.MF b/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..cfdce9ed00 --- /dev/null +++ b/das-java/branches/das-java-M2/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/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/NOTICE b/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/NOTICE new file mode 100644 index 0000000000..d48810c0ec --- /dev/null +++ b/das-java/branches/das-java-M2/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/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/README.txt b/das-java/branches/das-java-M2/rdb/src/main/resources/META-INF/README.txt new file mode 100644 index 0000000000..9b26d1690a --- /dev/null +++ b/das-java/branches/das-java-M2/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/das-java/branches/das-java-M2/rdb/src/main/resources/config.xsd b/das-java/branches/das-java-M2/rdb/src/main/resources/config.xsd new file mode 100644 index 0000000000..41d440dadd --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/resources/config.xsd @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl b/das-java/branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl new file mode 100644 index 0000000000..476974975b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/main/resources/dasmodel4.mdl @@ -0,0 +1,4622 @@ + +(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 ClassAttribute "dataSource" + quid "4485DF600233" + type "String") + (object ClassAttribute "dataObjectModel" + quid "449AB6CD0132" + 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 "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 "tableName" + quid "4362A7B2031D" + type "String") + (object ClassAttribute "typeName" + 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 "columnName" + 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 "name" + quid "449AB74D03DF" + type "type" + initv "initval")) + 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 "4362A3D302FA" + roles (list role_list + (object Role "$UNNAMED$4" + quid "4362A3D40143" + supplier "Logical View::config::Command" + quidu "4362A2EC01FE" + is_navigable TRUE + is_aggregate TRUE) + (object Role "$UNNAMED$5" + quid "4362A3D40144" + supplier "Logical View::config::Parameter" + quidu "4362A3C902BA" + client_cardinality (value cardinality "0..n") + Containment "By Value" + is_navigable TRUE))) + (object Association "$UNNAMED$6" + quid "4362A448026C" + roles (list role_list + (object Role "$UNNAMED$7" + quid "4362A4490105" + supplier "Logical View::config::Config" + quidu "4362A2DE0045" + is_navigable TRUE + is_aggregate TRUE) + (object Role "$UNNAMED$8" + quid "4362A4490106" + supplier "Logical View::config::Table" + quidu "4362A43C0002" + client_cardinality (value cardinality "0..n") + Containment "By Value" + is_navigable TRUE))) + (object Association "$UNNAMED$9" + quid "4362A44B0298" + roles (list role_list + (object Role "$UNNAMED$10" + quid "4362A44C01AA" + supplier "Logical View::config::Config" + quidu "4362A2DE0045" + is_navigable TRUE + is_aggregate TRUE) + (object Role "$UNNAMED$11" + quid "4362A44C01AB" + supplier "Logical View::config::Relationship" + quidu "4362A42E03A5" + client_cardinality (value cardinality "0..n") + Containment "By Value" + is_navigable TRUE))) + (object Association "$UNNAMED$12" + quid "4362A76302A1" + roles (list role_list + (object Role "$UNNAMED$13" + quid "4362A7640090" + supplier "Logical View::config::Table" + quidu "4362A43C0002" + is_navigable TRUE + is_aggregate TRUE) + (object Role "$UNNAMED$14" + quid "4362A7640091" + supplier "Logical View::config::Column" + quidu "4362A75C016B" + client_cardinality (value cardinality "0..n") + Containment "By Value" + is_navigable TRUE))) + (object Association "$UNNAMED$15" + quid "4362A771032E" + roles (list role_list + (object Role "$UNNAMED$16" + quid "4362A7720108" + supplier "Logical View::config::Relationship" + quidu "4362A42E03A5" + is_navigable TRUE + is_aggregate TRUE) + (object Role "$UNNAMED$17" + quid "4362A7720109" + supplier "Logical View::config::KeyPair" + quidu "4362A72E0010" + client_cardinality (value cardinality "0..n") + Containment "By Value" + is_navigable TRUE))) + (object Association "$UNNAMED$18" + quid "437B59A10066" + roles (list role_list + (object Role "$UNNAMED$19" + quid "437B59A30145" + supplier "Logical View::config::Command" + quidu "4362A2EC01FE" + Containment "By Value" + is_navigable TRUE + is_aggregate TRUE) + (object Role "$UNNAMED$20" + 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" + compartment (object Compartment + Parent_View @1 + location (809, 1287) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 3 + max_width 496) + 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" + compartment (object Compartment + Parent_View @2 + location (1756, 1348) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 8 + max_width 525) + width 536 + height 486 + autoResize TRUE) + (object ClassView "Class" "Logical View::config::Relationship" @3 + ShowCompartmentStereotypes TRUE + IncludeAttribute TRUE + IncludeOperation TRUE + location (1054, 744) + label (object ItemLabel + Parent_View @3 + 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" + compartment (object Compartment + Parent_View @3 + location (829, 648) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 5 + max_width 456) + width 468 + height 336 + autoResize TRUE) + (object AssociationViewNew "$UNNAMED$15" @4 + location (1081, 1063) + stereotype TRUE + line_color 3342489 + quidu "4362A771032E" + roleview_list (list RoleViews + (object RoleView "$UNNAMED$16" @5 + Parent_View @4 + location (-97, -84) + stereotype TRUE + line_color 3342489 + quidu "4362A7720108" + client @4 + supplier @3 + line_style 3 + origin_attachment (1080, 1063) + terminal_attachment (1080, 912)) + (object RoleView "$UNNAMED$17" @6 + Parent_View @4 + location (-97, -84) + stereotype TRUE + line_color 3342489 + quidu "4362A7720109" + client @4 + supplier @1 + line_style 3 + origin_attachment (1080, 1063) + terminal_attachment (1080, 1215) + label (object SegLabel @7 + Parent_View @6 + 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" @8 + ShowCompartmentStereotypes TRUE + IncludeAttribute TRUE + IncludeOperation TRUE + location (1984, 837) + label (object ItemLabel + Parent_View @8 + location (1814, 656) + fill_color 13434879 + nlines 1 + max_width 340 + justify 0 + label "Table") + icon_style "Icon" + line_color 3342489 + fill_color 13434879 + quidu "4362A43C0002" + compartment (object Compartment + Parent_View @8 + location (1814, 716) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 6 + max_width 346) + width 358 + height 386 + autoResize TRUE) + (object AssociationViewNew "$UNNAMED$12" @9 + location (1807, 1153) + stereotype TRUE + line_color 3342489 + quidu "4362A76302A1" + roleview_list (list RoleViews + (object RoleView "$UNNAMED$13" @10 + Parent_View @9 + location (1032, 6) + stereotype TRUE + line_color 3342489 + quidu "4362A7640090" + client @9 + supplier @8 + line_style 3 + origin_attachment (1807, 1153) + terminal_attachment (1807, 1030)) + (object RoleView "$UNNAMED$14" @11 + Parent_View @9 + location (1032, 6) + stereotype TRUE + line_color 3342489 + quidu "4362A7640091" + client @9 + supplier @2 + line_style 3 + origin_attachment (1807, 1153) + terminal_attachment (1807, 1276) + label (object SegLabel @12 + Parent_View @11 + location (1861, 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" @13 + ShowCompartmentStereotypes TRUE + IncludeAttribute TRUE + IncludeOperation TRUE + location (186, 806) + label (object ItemLabel + Parent_View @13 + 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" + compartment (object Compartment + Parent_View @13 + location (4, 760) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 3 + max_width 371) + width 382 + height 236 + autoResize TRUE) + (object ClassView "Class" "Logical View::config::Config" @14 + ShowCompartmentStereotypes TRUE + IncludeAttribute TRUE + IncludeOperation TRUE + location (1054, 186) + label (object ItemLabel + Parent_View @14 + location (828, 55) + fill_color 13434879 + nlines 1 + max_width 452 + justify 0 + label "Config") + icon_style "Icon" + line_color 3342489 + fill_color 13434879 + quidu "4362A2DE0045" + compartment (object Compartment + Parent_View @14 + location (828, 115) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 4 + max_width 450) + width 470 + height 286 + autoResize TRUE) + (object AssociationViewNew "$UNNAMED$9" @15 + location (1054, 452) + label (object SegLabel @16 + Parent_View @15 + location (1054, 393) + 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$10" @17 + Parent_View @15 + location (-93, -354) + label (object SegLabel @18 + Parent_View @17 + location (1013, 354) + 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 @15 + supplier @14 + line_style 0) + (object RoleView "$UNNAMED$11" @19 + Parent_View @15 + location (-93, -354) + label (object SegLabel @20 + Parent_View @19 + location (1013, 526) + 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 @15 + supplier @3 + line_style 0 + label (object SegLabel @21 + Parent_View @19 + location (1011, 562) + anchor 2 + anchor_loc 1 + nlines 1 + max_width 15 + justify 0 + label "0..*" + pctDist 0.899471 + height 44 + orientation 1)))) + (object AssociationViewNew "$UNNAMED$6" @22 + location (1829, 247) + stereotype TRUE + line_color 3342489 + quidu "4362A448026C" + roleview_list (list RoleViews + (object RoleView "$UNNAMED$7" @23 + Parent_View @22 + location (1023, -559) + stereotype TRUE + line_color 3342489 + quidu "4362A4490105" + client @22 + supplier @14 + line_style 3 + origin_attachment (1829, 247) + terminal_attachment (1289, 247)) + (object RoleView "$UNNAMED$8" @24 + Parent_View @22 + location (1023, -559) + stereotype TRUE + line_color 3342489 + quidu "4362A4490106" + client @22 + supplier @8 + vertices (list Points + (1829, 247) + (1972, 247) + (1972, 644)) + line_style 3 + origin_attachment (1829, 247) + terminal_attachment (1972, 644) + label (object SegLabel @25 + Parent_View @24 + location (2031, 441) + 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" @26 + ShowCompartmentStereotypes TRUE + IncludeAttribute TRUE + IncludeOperation TRUE + location (186, 217) + label (object ItemLabel + Parent_View @26 + 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" + compartment (object Compartment + Parent_View @26 + location (63, 146) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 4 + max_width 253) + width 264 + height 286 + autoResize TRUE) + (object AssociationViewNew "$UNNAMED$3" @27 + location (186, 523) + stereotype TRUE + line_color 3342489 + quidu "4362A3D302FA" + roleview_list (list RoleViews + (object RoleView "$UNNAMED$4" @28 + Parent_View @27 + location (-279, -500) + stereotype TRUE + line_color 3342489 + quidu "4362A3D40143" + client @27 + supplier @26 + line_style 0) + (object RoleView "$UNNAMED$5" @29 + Parent_View @27 + location (-279, -500) + stereotype TRUE + line_color 3342489 + quidu "4362A3D40144" + client @27 + supplier @13 + line_style 0 + label (object SegLabel @30 + Parent_View @29 + 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" @31 + location (568, 213) + stereotype TRUE + line_color 3342489 + quidu "4362A3030323" + roleview_list (list RoleViews + (object RoleView "$UNNAMED$1" @32 + Parent_View @31 + location (134, -469) + stereotype TRUE + line_color 3342489 + quidu "4362A3040108" + client @31 + supplier @14 + line_style 3 + origin_attachment (568, 213) + terminal_attachment (819, 213)) + (object RoleView "$UNNAMED$2" @33 + Parent_View @31 + location (134, -469) + stereotype TRUE + line_color 3342489 + quidu "4362A3040109" + client @31 + supplier @26 + line_style 3 + origin_attachment (568, 213) + terminal_attachment (318, 213) + label (object SegLabel @34 + Parent_View @33 + location (360, 261) + 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" @35 + ShowCompartmentStereotypes TRUE + IncludeAttribute TRUE + IncludeOperation TRUE + location (465, 1240) + label (object ItemLabel + Parent_View @35 + 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" + compartment (object Compartment + Parent_View @35 + location (248, 1144) + icon_style "Icon" + fill_color 16777215 + anchor 2 + nlines 5 + max_width 431) + width 452 + height 336 + annotation 8 + autoResize TRUE) + (object AssociationViewNew "$UNNAMED$18" @36 + location (484, 626) + stereotype TRUE + line_color 3342489 + quidu "437B59A10066" + roleview_list (list RoleViews + (object RoleView "$UNNAMED$19" @37 + Parent_View @36 + location (50, -614) + stereotype TRUE + line_color 3342489 + quidu "437B59A30145" + client @36 + supplier @26 + vertices (list Points + (484, 626) + (484, 347) + (318, 347)) + line_style 3 + origin_attachment (484, 626) + terminal_attachment (318, 347)) + (object RoleView "$UNNAMED$20" @38 + Parent_View @36 + location (50, -614) + stereotype TRUE + line_color 3342489 + quidu "437B59A30146" + client @36 + supplier @35 + line_style 3 + origin_attachment (484, 626) + terminal_attachment (484, 1072) + label (object SegLabel @39 + Parent_View @38 + 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" @40 + location (682, 589) + label (object ItemLabel + Parent_View @40 + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java new file mode 100644 index 0000000000..b9226e3e01 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java @@ -0,0 +1,162 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +import org.apache.tuscany.das.rdb.test.data.BookData; +import org.apache.tuscany.das.rdb.test.framework.DasTest; + +import commonj.sdo.DataObject; + +public class AliasTests extends DasTest { + + protected void setUp() throws Exception { + + super.setUp(); + new BookData(getAutoConnection()).refresh(); + } + + /** + * Tests the use of column aliasing. The property name change is found in the + * BooksConfig.xml file Otherwise similar to testTableAlias + * + * @throws Exception + */ + public void testColumnAlias() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection()); + + Command select = das.getCommand("get all books"); + // select.setConnection( getConnection() ); + + DataObject root = select.executeQuery(); + + DataObject book = root.getDataObject("Book[2]"); + book.set("Writer", "Dr. Seuss"); + + das.applyChanges(root); + + select = das.getCommand("get Cat in the Hat"); + + root = select.executeQuery(); + // Ensure the change actually updated + assertEquals("Dr. Seuss", root.getString("Book[1]/Writer")); + } + + /** + * Tests to ensure that columns are being properly read when using an Alias, + * just a bunch of simple creating, renaming, and deleting of entries + * while using an alias. + */ + public void testColumnData() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection()); + + Command select = das.getCommand("get book by ID"); + select.setParameter(1, Integer.valueOf(1)); + + // *******Verifys a column entry is readable + DataObject root = select.executeQuery(); + assertEquals("Fyodor Dostoevsky", root.getString("Book[1]/Writer")); + + DataObject bookToChange = root.getDataObject("Book[1]"); + bookToChange.set("Writer", "Fyodor Dostoevskii"); // His last name COULD be spelt like that too! + + das.applyChanges(root); + + // *******Verifys correct information in entry after a column data is changed + select = das.getCommand("get all books"); + // select.setConnection(getConnection()); + + root = select.executeQuery(); + bookToChange = null; + Iterator i = root.getList("Book").iterator(); + while (i.hasNext()) { + DataObject d = (DataObject) i.next(); + if ("Fyodor Dostoevskii".equals(d.getString("Writer"))) { + bookToChange = d; + } + } + assertFalse(bookToChange == null); + + bookToChange.delete(); + + das.applyChanges(root); + + // *******Verifys correct in table, after entry is deleted + select = das.getCommand("get all books"); + // select.setConnection(getConnection()); + + root = select.executeQuery(); + assertEquals(1, root.getList("Book").size()); + assertEquals("Doctor Seuss", root.getString("Book[1]/Writer")); + } + + /** + * Test to check if updating a table works when using Aliasing Previously this was test_4 in ExceptionTests. + */ + public void testTableAlias() throws Exception { + + // Create Table config programmatically + // ConfigHelper helper = new ConfigHelper(); + // helper.addTable("BOOK", "Book"); + // helper.addPrimaryKey("BOOK.BOOK_ID"); + + DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection()); + Command select = das.getCommand("get book by ID"); + select.setParameter(1, Integer.valueOf(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); + + das.applyChanges(root); + + root = select.executeQuery(); + + // Verify + select.setParameter(1, Integer.valueOf(1001)); + root = select.executeQuery(); + + assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME")); + } + + /** + * Test ability to assign DataObject type and propertyaliases with xml file + */ + public void testRead() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("customerMapping.xml"), getConnection()); + // Read a customer + Command select = das.createCommand("SELECT * FROM CUSTOMER WHERE CUSTOMER.ID = 1"); + + 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")); + + } +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java new file mode 100644 index 0000000000..bb53cb65e5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; + +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.DAS; +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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + Command read = das.getCommand("all companies"); + DataObject root = read.executeQuery(); + assertEquals(3, root.getList("COMPANY").size()); + + } + + //Read list of companies + public void testReadCompaniesWithDepartments() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + Command read = das.getCommand("all companies and departments"); + DataObject root = read.executeQuery(); + + Iterator i = root.getList("COMPANY").iterator(); + while (i.hasNext()) { + DataObject d = (DataObject) i.next(); + List departments = d.getList("departments"); + if (d.getString("NAME").equals("Do-rite plumbing") || d.getString("NAME").equals("ACME Publishing")) { + assertEquals(0, departments.size()); + } else { + assertEquals(1, departments.size()); + } + } + + } + + public void testddDepartmentToFirstCompany() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + Command read = das.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); + + das.applyChanges(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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + Command select = das.getCommand("all companies and departments"); + 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("DEPNUMBER", "101"); + + // Associate the new department with the new company + company.getList("departments").add(department); + + // Get apply command + das.applyChanges(root); + + // Save the id + Integer id = (Integer) company.get("ID"); + + // Verify the change + + select = das.getCommand("company by id with departments"); + select.setParameter(1, 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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + + Command select = das.getCommand("company by id with departments"); + Integer idOfNoExistingCompany = Integer.valueOf(-1); + select.setParameter(1, idOfNoExistingCompany); + DataObject root = select.executeQuery(); + + //Will fail if there is no property named "COMPANY" + assertEquals(0, root.getList("COMPANY").size()); + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java new file mode 100644 index 0000000000..ee42438cb1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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 { + DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithInvalidCUD.xml"), getConnection()); + + // Read customer with particular ID + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + // Modify customer + customer.set("LASTNAME", "Pavick"); + + // Flush changes + try { + das.applyChanges(root); + fail("Should fail with invalid SQL. Provided CUD not used!!"); + } catch (RuntimeException e) { + // Everything OK + } + + } + + public void testInsertCUDGeneration() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = root.createDataObject("CUSTOMER"); + customer.setInt("ID", 720); + customer.set("LASTNAME", "foobar"); + customer.set("ADDRESS", "asdfasdf"); + + das.applyChanges(root); + + select = das.createCommand("select * from CUSTOMER where ID = 720"); + root = select.executeQuery(); + + assertEquals(1, root.getList("CUSTOMER").size()); + } + + public void testReadModifyApply() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("1xM_mapping_no_cud.xml"), getConnection()); + + // Build the select command to read a specific customer and related + // orders + Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " + + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); + + // Parameterize the command + select.setParameter(1, Integer.valueOf(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"); + + das.applyChanges(root); + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java new file mode 100644 index 0000000000..076f8d9db7 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.config.Config; +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.das.rdb.util.ConfigUtil; + +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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + + Command read = das.getCommand("all customers"); + DataObject root = read.executeQuery(); + + assertEquals(5, root.getList("CUSTOMER").size()); + + } + + /** + * Read + */ + public void testReadUsingConfigInput() throws Exception { + Config config = ConfigUtil.loadConfig(getConfig("CustomersOrdersConfig.xml")); + DAS das = DAS.FACTORY.createDAS(config, getConnection()); + + Command read = das.getCommand("all customers"); + DataObject root = read.executeQuery(); + + assertEquals(5, root.getList("CUSTOMER").size()); + + } + + /** + * Read an order using parm marker + */ + public void testReadWithParmmarker() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + + Command read = das.getCommand("order by id"); + read.setParameter(1, Integer.valueOf(1)); + DataObject root = read.executeQuery(); + + assertEquals("recombobulator", root.getString("ANORDER[1]/PRODUCT")); + + } + + /** + * Specify connection properties in config. Add explicit update command + */ + public void testUpdate() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + + Command read = das.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 = das.getCommand("update customer"); + update.setParameter(1, Integer.valueOf(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 + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + + // Read all customers and remember the first one + Command read = das.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 = das.getCommand("customer and orders"); + custOrders.setParameter(1, 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"); + das.applyChanges(root); + + // Verify + Command orderByID = das.getCommand("order by id"); + orderByID.setParameter(1, orderId); + assertEquals("Defibrillator", root.getString("ANORDER[1]/PRODUCT")); + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java new file mode 100644 index 0000000000..677b0d9d85 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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.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; + +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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("companyMapping.xml"), getConnection()); + + // Build the select command + Command selectCommand = das.createCommand("select COMPANY.NAME, " + + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, " + + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.DEPNUMBER from COMPANY, DEPARTMENT, EMPLOYEE " + + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID"); + + // 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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("companyMappingWithConverters.xml"), getConnection()); + SDOUtil.registerStaticTypes(CompanyFactory.class); + // Build the select command + Command selectCommand = das.createCommand("select COMPANY.NAME, " + + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, " + + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.DEPNUMBER from COMPANY, DEPARTMENT, EMPLOYEE " + + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID"); + + // Get the graph + DataObject root = selectCommand.executeQuery(); + + CompanyType company = (CompanyType) root.getList("CompanyType").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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java new file mode 100644 index 0000000000..a24ad6319e --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?"); + + getOrderDetails.setParameter(1, Integer.valueOf(1)); + getOrderDetails.setParameter(2, Integer.valueOf(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 { + DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection()); + Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = 1 AND PRODUCTID = 1"); + + 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 + + das.applyChanges(root); + + // Verify + root = getOrderDetails.executeQuery(); + orderDetails = root.getDataObject("ORDERDETAILS[1]"); + assertEquals(0f, orderDetails.getFloat("PRICE"), 0.01); + + } + + public void testReadOrdersAndDetails2() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection()); + Command read = das.createCommand("SELECT * FROM ANORDER LEFT JOIN ORDERDETAILS " + + "ON ANORDER.ID = ORDERDETAILS.ORDERID ORDER BY ANORDER.ID"); + + DataObject root = read.executeQuery(); + + DataObject firstOrder = root.getDataObject("ANORDER[1]"); + assertEquals(1, firstOrder.getInt("ID")); + assertEquals(2, firstOrder.getList("ORDERDETAILS").size()); + + } + + public void testReadAndDelete() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection()); + Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?"); + + getOrderDetails.setParameter(1, Integer.valueOf(1)); + getOrderDetails.setParameter(2, Integer.valueOf(1)); + + DataObject root = getOrderDetails.executeQuery(); + + DataObject orderDetail = (DataObject) root.get("ORDERDETAILS[1]"); + orderDetail.delete(); + das.applyChanges(root); + + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java new file mode 100644 index 0000000000..e8a4593602 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.DAS; +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.data.CustomerData; +import org.apache.tuscany.das.rdb.test.framework.DasTest; +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.DataObject; + +/** + * Tests the Converter framwork + */ +public class ConverterTests extends DasTest { + + private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd"); + + private static Date kbday; + + private static Date tbday; + + protected void setUp() throws Exception { + super.setUp(); + new CustomerData(getAutoConnection()).refresh(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + 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 { + DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfigWithConverter.xml"), getConnection()); + + // Create and initialize command to read customers + Command read = das.getCommand("testArbitraryConverter"); + + // Read + DataObject root = read.executeQuery(); + + // Verify + assertEquals(kbday, root.getDate("CUSTOMER[1]/LASTNAME")); + + // Modify + root.setDate("CUSTOMER[1]/LASTNAME", tbday); + + das.applyChanges(root); + + // Read + root = read.executeQuery(); + + // Verify + assertEquals(tbday, root.getDate("CUSTOMER[1]/LASTNAME")); + + } + + public void testInvalidConverter1() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection()); + + // Build the select command to read a specific customer and related + // orders + Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " + + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); + + // Parameterize the command + select.setParameter(1, Integer.valueOf(1)); + + // Get the graph + try { + select.executeQuery(); + } catch (Exception ex) { + assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage()); + } + + } + + public void testInvalidConverter2() throws Exception { + + SDOUtil.registerStaticTypes(CustomerFactory.class); + DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection()); + + // Build the select command to read a specific customer and related + // orders + Command select = das.createCommand("SELECT * FROM ANORDER"); + + // Get the graph + + DataObject root = select.executeQuery(); + DataObject order = root.getDataObject("AnOrder[1]"); + + Customer customer = (Customer) root.createDataObject("Customer"); + customer.setID(700); + customer.setLastName("Daniel"); + customer.setAddress("an address"); + + customer.getOrders().add(order); + + try { + das.applyChanges(root); + } catch (Exception ex) { + assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage()); + } + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java new file mode 100644 index 0000000000..ff2af5256c --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java @@ -0,0 +1,304 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.ConfigHelper; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.config.Table; +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 { + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + // Read some customers and related orders + Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " + + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); + + 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", Integer.valueOf(99)); + order.set("PRODUCT", "The 99th product"); + order.set("QUANTITY", Integer.valueOf(99)); + cust.getList("orders").add(order); + + assertEquals(custOrderCount + 1, cust.getList("orders").size()); + + // Build apply changes command + das.applyChanges(root); + + // verify cust1 relationship updates + select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " + + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); + + select.setParameter(1, Integer.valueOf(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 (?, ?)"; + + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand(sql); + insert.setParameter(1, Integer.valueOf(316405209)); + insert.setParameter(2, "2005-11-23 19:29:52.636"); + insert.execute(); + + // Verify + Command select = das.createCommand("Select * from conmgt.SERVERSTATUS"); + DataObject root = select.executeQuery(); + assertEquals(1, root.getList("SERVERSTATUS").size()); + + } + + public void testWASDefect330118() throws Exception { + + // Create the group and set common connection + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + + // Read all customers and add one + Command read = das.getCommand("all customers"); + DataObject root = read.executeQuery(); + int numCustomers = root.getList("CUSTOMER").size(); + + DataObject newCust = root.createDataObject("CUSTOMER"); + newCust.set("ID", Integer.valueOf(100)); + newCust.set("ADDRESS", "5528 Wells Fargo Drive"); + newCust.set("LASTNAME", "Gerkin"); + + // Now delete this new customer + newCust.delete(); + + das.applyChanges(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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); + insert.setParameter(1, Integer.valueOf(10)); + insert.setParameter(2, null); + insert.setParameter(3, "5528 Wells Fargo Dr"); + insert.execute(); + + // Verify + Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); + 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); + insert.setParameter(1, Integer.valueOf(10)); + // insert.setParameterValue("LASTNAME", null); + insert.setParameter(3, "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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); + insert.setParameter(1, Integer.valueOf(10)); + insert.setParameter(2, ""); + insert.setParameter(3, "5528 Wells Fargo Dr"); + insert.execute(); + + // Verify + Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); + 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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + + // Read a specific company based on the known ID + Command readCust = das.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; + } + + das.applyChanges(root); + } + + /** + * 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); + insert.setParameter(1, Integer.valueOf(10)); + insert.setParameter(2, "Williams"); + insert.setParameter(3, null); + insert.execute(); + + // Verify + Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); + DataObject root = select.executeQuery(); + assertEquals(1, root.getList("CUSTOMER").size()); + assertNull(root.get("CUSTOMER[1]/ADDRESS")); + + } + + /** + * Formely tests concerning Tuscany-433. The error causing these tests was cleared up when + * the method for handling parameters was changed. + */ + public void testReadModifyApply() throws Exception { + + // Provide updatecommand programmatically via config + ConfigHelper helper = new ConfigHelper(); + Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER"); + helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME = ? where ID = ?", "LASTNAME ID"); + + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + + //Read customer 1 + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + //Modify customer + customer.set("LASTNAME", "Pavick"); + + das.applyChanges(root); + + //Verify changes + root = select.executeQuery(); + assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); + + } + + public void testReadModifyApply1() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD2.xml"), getConnection()); + //Read customer 1 + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + //Modify customer + customer.set("LASTNAME", "Pavick"); + + //Build apply changes command + das.applyChanges(root); + + //Verify changes + root = select.executeQuery(); + assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); + + } + +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java new file mode 100644 index 0000000000..a888fbd818 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java @@ -0,0 +1,350 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.ConfigHelper; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.config.Table; +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(); + } + + public void testDeleteAndCreate() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD2.xml"), getConnection()); + // Read customer 1 + Command select = das.createCommand("Select * from CUSTOMER"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + int customerId = customer.getInt("ID"); + // Modify customer + customer.delete(); + + DataObject newCustomer = root.createDataObject("CUSTOMER"); + newCustomer.setInt("ID", 9999); + newCustomer.setString("LASTNAME", "Jones"); + + // Build apply changes command + das.applyChanges(root); + + // Verify changes + root = select.executeQuery(); + boolean found = false; + Iterator i = root.getList("CUSTOMER").iterator(); + while (i.hasNext()) { + customer = (DataObject) i.next(); + assertFalse(customerId == customer.getInt("ID")); + if (customer.getInt("ID") == 9999) { + found = true; + } + } + + assertTrue(found); + + } + + /** + * Read and modify a customer. Provide needed Create/Update/Delete statements programatically + */ + public void testReadModifyApply() throws Exception { + + // Provide updatecommand programmatically via config + ConfigHelper helper = new ConfigHelper(); + Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER"); + helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME = ?, ADDRESS = ? " + + "where ID = ?", "LASTNAME ADDRESS ID"); + + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + // Read customer 1 + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + // Modify customer + customer.set("LASTNAME", "Pavick"); + + // Build apply changes command + das.applyChanges(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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD.xml"), getConnection()); + // Read customer 1 + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + // Modify customer + customer.set("LASTNAME", "Pavick"); + + // Build apply changes command + das.applyChanges(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 { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Read customer with particular ID + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = root.getDataObject("CUSTOMER[1]"); + + // Modify customer + customer.set("LASTNAME", "Pavick"); + + // Build apply changes command + das.applyChanges(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 { + DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection()); + // Read customer with particular ID + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + // Modify customer + customer.set("LASTNAME", "Pavick"); + + // Build apply changes command + das.applyChanges(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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection()); + // Read some customers + Command select = das.createCommand("Select * from CUSTOMER where LASTNAME = 'Williams'"); + 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", Integer.valueOf(100)); + cust4.set("ADDRESS", "5528 Wells Fargo Drive"); + cust4.set("LASTNAME", "Gerkin"); + + // Build apply changes command + das.applyChanges(root); + + // Verify deletes + select = das.createCommand("Select * from CUSTOMER where ID = ?"); + select.setParameter(1, Integer.valueOf(cust2ID)); + root = select.executeQuery(); + assertTrue(root.getList("CUSTOMER").isEmpty()); + // reparameterize same command + select.setParameter(1, Integer.valueOf(cust3ID)); + root = select.executeQuery(); + assertTrue(root.getList("CUSTOMER").isEmpty()); + + // verify insert + select.setParameter(1, Integer.valueOf(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.setParameter(1, Integer.valueOf(cust1ID)); + root = select.executeQuery(); + assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); + + } + + public void testReadModifyApplyWithAssumedID() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Read customer with particular ID + Command select = das.createCommand("Select * from CUSTOMER"); + DataObject root = select.executeQuery(); + + DataObject customer = root.getDataObject("CUSTOMER[1]"); + + // Modify customer + customer.set("LASTNAME", "Pavick"); + + DataObject customerForDelete = getCustomerByLastName(root, "Daniel"); + customerForDelete.delete(); + + DataObject newCustomer = root.createDataObject("CUSTOMER"); + newCustomer.set("LASTNAME", "NewCustomer"); + newCustomer.setInt("ID", 9000); + + // Build apply changes command + das.applyChanges(root); + + // Verify the change + root = select.executeQuery(); + assertEquals("Pavick", getCustomerByLastName(root, "Pavick").getString("LASTNAME")); + assertEquals("NewCustomer", getCustomerByLastName(root, "NewCustomer").getString("LASTNAME")); + assertNull(getCustomerByLastName(root, "Daniel")); + + } + + public void testReadModifyApplyWithAssumedIDFailure() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command select = das.createCommand("Select * from ORDERDETAILS"); + + DataObject root = select.executeQuery(); + + DataObject od = root.getDataObject("ORDERDETAILS[1]"); + + // Modify customer + od.setInt("PRODUCTID", 72); + + // Flush changes -- This should fail because Order Details does not have + // a column that + // we can assume to be an ID + try { + das.applyChanges(root); + } catch (RuntimeException ex) { + assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config")); + } + + } + + public void testReadModifyApplyWithAssumedIDFailure2() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command select = das.createCommand("Select * from ORDERDETAILS"); + DataObject root = select.executeQuery(); + + DataObject od = root.getDataObject("ORDERDETAILS[1]"); + od.delete(); + + // Flush changes -- This should fail because Order Details does not have + // a column that + // we can assume to be an ID + try { + das.applyChanges(root); + } catch (RuntimeException ex) { + assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config")); + } + + } + + public void testReadModifyApplyWithAssumedIDFailure3() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command select = das.createCommand("Select * from ORDERDETAILS"); + DataObject root = select.executeQuery(); + + DataObject od = root.createDataObject("ORDERDETAILS"); + + // Modify customer + od.setInt("PRODUCTID", 72); + od.setInt("ORDERID", 500); + + // Flush changes -- This should fail because Order Details does not have + // a column that + // we can assume to be an ID + try { + das.applyChanges(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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java new file mode 100644 index 0000000000..4c5f128db5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java @@ -0,0 +1,106 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.DAS; +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')"; + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand(sql); + insert.execute(); + + // Verify + Command select = das.createCommand("Select * from conmgt.serverstatus where statusid = 316405209"); + DataObject root = select.executeQuery(); + assertEquals(1, root.getList("conmgt.serverstatus").size()); + + } + + public void testUpdateChildThatHasGeneratedKey() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml")); + + //Read a specific company based on the known ID + Command readCust = das.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; + } + + das.applyChanges(root); + + } + +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java new file mode 100644 index 0000000000..e66095cdd7 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java @@ -0,0 +1,149 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Connection; +import java.sql.SQLException; + +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.test.company.CompanyFactory; +import org.apache.tuscany.das.rdb.test.customer.CustomerFactory; +import org.apache.tuscany.das.rdb.test.data.BookData; +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.data.OrderDetailsData; +import org.apache.tuscany.das.rdb.test.framework.DasTest; +import org.apache.tuscany.sdo.util.SDOUtil; + +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(); + new OrderDetailsData(getAutoConnection()).refresh(); + new CompanyData(getAutoConnection()).refresh(); + + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testMissingConnection() throws Exception { + DAS das = DAS.FACTORY.createDAS((Connection) null); + + try { + Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); + readCustomers.executeQuery(); + fail("RuntimeException should be thrown"); + } catch (RuntimeException ex) { + assertEquals("No connection has been provided and no data source has been specified", ex.getMessage()); + } + + } + + public void testUnregisteredTypes() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("staticInvalid.xml"), getConnection()); + Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); + + try { + readCustomers.executeQuery(); + + fail("Exception should be thrown"); + } catch (RuntimeException ex) { + assertEquals("SDO Types have not been registered for URI invalidURI", ex.getMessage()); + } + } + + public void testMissingMapping() throws Exception { + SDOUtil.registerStaticTypes(CustomerFactory.class); + DAS das = DAS.FACTORY.createDAS(getConfig("staticCustomer.xml"), getConnection()); + Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); + + 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 { + DAS.FACTORY.createDAS(getConfig("NonExistingFile.xml")); + fail("Error should be thrown"); + } catch (RuntimeException 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 { + DAS.FACTORY.createDAS(getConfig("NonExistingFile.xml")); + fail("Error should be thrown"); + } catch (RuntimeException e) { + assertEquals("Cannot load configuration from a null InputStream. Possibly caused " + + "by an incorrect config xml file name", e.getMessage()); + } + } + + public void testReadOrdersAndDetails2() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConfig1.xml"), getConnection()); + Command read = das.createCommand("SELECT * FROM ANORDER LEFT JOIN ORDERDETAILS " + + "ON ANORDER.ID = ORDERDETAILS.ORDERID ORDER BY ANORDER.ID"); + + try { + read.executeQuery(); + } catch (Exception ex) { + assertEquals("The parent table (xxx) in relationship ORDERDETAILS was not found.", ex.getMessage()); + } + + } + + public void testMismatchedDataObjectModel() throws SQLException { + SDOUtil.registerStaticTypes(CompanyFactory.class); + DAS das = DAS.FACTORY.createDAS(getConfig("companyMappingWithConverters.xml"), getConnection()); + Command read = das.createCommand("select * from company"); + try { + read.executeQuery(); + } catch (RuntimeException ex) { + assertEquals("Type CompanyType does not contain a property named ID", ex.getMessage()); + } + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java new file mode 100644 index 0000000000..45c83e6167 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.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.setParameter(1, "Williams"); + + DataObject root = cmd.executeQuery(); + assertEquals(4, root.getList("CUSTOMER").size()); + + } + + public void testReadCustomersStaticTypes() throws Exception { + ReadCustomersStaticTypesCommand cmd = new ReadCustomersStaticTypesCommand(); + cmd.setConnection(getConnection()); + cmd.setParameter(1, "Williams"); + + DataObject root = cmd.executeQuery(); + + List customers = root.getList("Customer"); + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java new file mode 100644 index 0000000000..f339ea2634 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java @@ -0,0 +1,293 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.Iterator; + +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.DAS; +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 { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into COMPANY (NAME) values (?)"); + insert.setParameter(1, "AAA Rental"); + insert.execute(); + + // Verify insert + // Verify + Command select = das.createCommand("Select ID, NAME from COMPANY"); + 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 { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into COMPANY (NAME) values (?)"); + insert.setParameter(1, "AAA Rental"); + insert.execute(); + + // insert another using same command + insert.setParameter(1, "BBB Rental"); + insert.execute(); + + // Verify insert + // Verify + Command select = das.createCommand("Select ID, NAME from COMPANY"); + DataObject root = select.executeQuery(); + + assertEquals(5, root.getList("COMPANY").size()); + + } + + // Test ability to retrieve and utilize the generated key + public void testInsert3() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into COMPANY (NAME) values (?)"); + insert.setParameter(1, "AAA Rental"); + insert.execute(); + // Integer key = (Integer) insert.getParameterValue("generated_key"); + Integer key = (Integer) insert.getGeneratedKey(); + + // Verify insert + Command select = das.createCommand("Select ID, NAME from COMPANY where ID = ?"); + select.setParameter(1, key); + DataObject root = select.executeQuery(); + assertEquals(key, root.get("COMPANY[1]/ID")); + + } + + // Test insert into row with generated ID and generated insert + public void testInsert4() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + Command select = das.getCommand("all companies"); + DataObject root = select.executeQuery(); + + DataObject company = root.createDataObject("COMPANY"); + company.setString("NAME", "Phil's Tires"); + // This shouldn't do anything + company.setInt("ID", 999); + + das.applyChanges(root); + + // Verify insert + root = select.executeQuery(); + + assertEquals(4, root.getList("COMPANY").size()); + Iterator i = root.getList("COMPANY").iterator(); + while (i.hasNext()) { + DataObject comp = (DataObject) i.next(); + assertFalse(comp.getInt("ID") == 999); + } + + } + + // Test ability to propogate generated values back to owning data objects + public void testPropagateIds() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection()); + Command select = das.getCommand("all companies"); + DataObject root = select.executeQuery(); + + // Create a new Company + DataObject company = root.createDataObject("COMPANY"); + company.setString("NAME", "Do-rite Pest Control"); + + // verify pre-condition (id is not there until after flush) + assertNull(company.get("ID")); + + // Flush changes + das.applyChanges(root); + + // Save the id + Integer id = (Integer) company.get("ID"); + + // Verify the change + select = das.createCommand("Select * from COMPANY where ID = ?"); + select.setParameter(1, 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 { + DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyMapping.xml"), getConnection()); + Command select = das.createCommand("Select * from COMPANY"); + DataObject root = select.executeQuery(); + + // Create a new Company + DataObject company = root.createDataObject("COMPANY"); + company.setString("NAME", "Do-rite Pest Control"); + + // verify pre-condition (id is not there until after flush) + assertNull(company.get("ID")); + + // Flush changes + das.applyChanges(root); + + // Save the id + Integer id = (Integer) company.get("ID"); + + // Verify the change + select = das.createCommand("Select * from COMPANY where ID = ?"); + select.setParameter(1, 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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyDepartmentMapping.xml"), getConnection()); + String selectCompanys = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID"; + + Command select = das.createCommand(selectCompanys); + 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("DEPNUMBER", "101"); + + // Associate the new department with the new company + company.getList("departments").add(department); + + das.applyChanges(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 = ?"; + + select = das.createCommand(selectString); + select.setParameter(1, 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"; + + DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyDepartmentMapping.xml"), getConnection()); + Command select = das.createCommand(selectCompanys); + 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("DEPNUMBER", "101"); + + // Associate the new department with the new company + company.getList("departments").add(department); + + das.applyChanges(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 = ?"; + + select = das.createCommand(selectString); + select.setParameter(1, 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command select = das.createCommand("Select * from COMPANY"); + select.executeQuery(); + + try { + select.getGeneratedKey(); + fail("Should throw exception"); + } catch (RuntimeException e) { + assertEquals("This method is only valid for insert commands", e.getMessage()); + } + } + +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java new file mode 100644 index 0000000000..23b530dc34 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.List; + +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.ConfigHelper; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.merge.impl.GraphMerger; +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.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; + +public class GraphMergeTests extends DasTest { + + protected void setUp() throws Exception { + super.setUp(); + + new CustomerData(getAutoConnection()).refresh(); + new OrderData(getAutoConnection()).refresh(); + + } + + public void testCreateEmptyGraph() throws Exception { + String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd"; + SDOUtil.registerStaticTypes(CustomerFactory.class); + ConfigHelper helper = new ConfigHelper(); + helper.setDataObjectModel(typeUri); + DataObject graph = new GraphMerger().emptyGraph(helper.getConfig()); + assertEquals(0, graph.getList("Customer").size()); + assertEquals(0, graph.getList("AnOrder").size()); + + } + + public void testCreateEmptyGraphAndAddCustomer() throws Exception { + String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd"; + SDOUtil.registerStaticTypes(CustomerFactory.class); + ConfigHelper helper = new ConfigHelper(); + helper.setDataObjectModel(typeUri); + helper.addTable("CUSTOMER", "Customer"); + helper.addPrimaryKey("CUSTOMER.ID"); + + DataObject graph = new GraphMerger().emptyGraph(helper.getConfig()); + Customer c = (Customer) graph.createDataObject("Customer"); + c.setID(4000); + c.setLastName("Smith"); + c.setAddress("400 Fourth Street"); + + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + das.applyChanges(graph); + + Command cmd = das.createCommand("select * from CUSTOMER order by ID desc"); + graph = cmd.executeQuery(); + assertEquals(6, graph.getList("Customer").size()); + assertEquals("Smith", graph.getDataObject("Customer[1]").getString("lastName")); + assertEquals("400 Fourth Street", graph.getDataObject("Customer[1]").getString("address")); + + } + + public void testSingleTableMerge() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= ?"); + select.setParameter(1, "3"); + DataObject graph1 = select.executeQuery(); + assertEquals(3, graph1.getList("CUSTOMER").size()); + + select.setParameter(1, "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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= ?"); + select.setParameter(1, "3"); + DataObject graph1 = select.executeQuery(); + assertEquals(3, graph1.getList("CUSTOMER").size()); + + select.setParameter(1, "4"); + DataObject graph2 = select.executeQuery(); + assertEquals(4, graph2.getList("CUSTOMER").size()); + + select.setParameter(1, "5"); + DataObject graph3 = select.executeQuery(); + assertEquals(5, graph3.getList("CUSTOMER").size()); + + GraphMerger merger = new GraphMerger(); + merger.addPrimaryKey("CUSTOMER.ID"); + List 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 { + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + // Read some customers and related orders + Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " + + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); + + select.setParameter(1, Integer.valueOf(1)); + DataObject graph1 = select.executeQuery(); + + DataObject customer = (DataObject) graph1.getList("CUSTOMER").get(0); + assertEquals(2, customer.getList("orders").size()); + + select.setParameter(1, Integer.valueOf(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 { + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + // Read some customers and related orders + Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " + + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); + + select.setParameter(1, Integer.valueOf(1)); + DataObject graph1 = select.executeQuery(); + + DataObject customer = (DataObject) graph1.getList("CUSTOMER").get(0); + assertEquals(2, customer.getList("orders").size()); + + DAS das2 = DAS.FACTORY.createDAS(getConnection()); + Command select2 = das2.createCommand("select * from ANORDER"); + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java new file mode 100644 index 0000000000..96a01455f5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ConfigHelper; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.config.Relationship; +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; +import commonj.sdo.Property; + +public class ImpliedRelationshipTests extends DasTest { + protected void setUp() throws Exception { + super.setUp(); + + new CustomerData(getAutoConnection()).refresh(); + new OrderData(getAutoConnection()).refresh(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + /** + * Ensure that an implied relationship is not created when a defined one already exists + * + * @throws Exception + */ + public void testRelationshipAlreadyDefined() throws Exception { + ConfigHelper helper = new ConfigHelper(); + Relationship r = helper.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID"); + r.setName("definedRelationship"); + + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + Command select = das.createCommand("select * from CUSTOMER left join ANORDER " + + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); + + DataObject root = select.executeQuery(); + DataObject cust = root.getDataObject("CUSTOMER[1]"); + Iterator i = cust.getType().getProperties().iterator(); + while (i.hasNext()) { + Property p = (Property) i.next(); + if (!p.getType().isDataType()) { + assertEquals(p.getName(), "definedRelationship"); + } + } + } + + /** + * Add a new Order to a list of Customers without defining any config information + * + * @throws Exception + */ + public void testAddNewOrder() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + + Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " + + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); + + DataObject root = select.executeQuery(); + + DataObject cust = root.getDataObject("CUSTOMER[1]"); + + // Save ID and Order Count + int custID = cust.getInt("ID"); + int custOrderCount = cust.getList("ANORDER").size(); + + // Create a new Order and add to customer1 + DataObject order = root.createDataObject("ANORDER"); + + order.set("ID", Integer.valueOf(99)); + order.set("PRODUCT", "The 99th product"); + order.set("QUANTITY", Integer.valueOf(99)); + cust.getList("ANORDER").add(order); + + assertEquals(custOrderCount + 1, cust.getList("ANORDER").size()); + + // Build apply changes command + das.applyChanges(root); + + // verify cust1 relationship updates + select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID " + + "where CUSTOMER.ID = ?"); + + select.setParameter(1, Integer.valueOf(custID)); + root = select.executeQuery(); + + assertEquals(custOrderCount + 1, root.getList("CUSTOMER[1]/ANORDER").size()); + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java new file mode 100644 index 0000000000..b2aa8a8691 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Timestamp; + +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.test.data.DogData; +import org.apache.tuscany.das.rdb.test.data.KennelData; +import org.apache.tuscany.das.rdb.test.data.OwnerData; +import org.apache.tuscany.das.rdb.test.data.OwnerDogData; +import org.apache.tuscany.das.rdb.test.data.VisitData; +import org.apache.tuscany.das.rdb.test.framework.DasTest; +import org.apache.tuscany.das.rdb.test.framework.TestData; + +import commonj.sdo.DataObject; + +public class KennelTests extends DasTest { + + protected void setUp() throws Exception { + super.setUp(); + + new DogData(getAutoConnection()).refresh(); + new OwnerData(getAutoConnection()).refresh(); + new OwnerDogData(getAutoConnection()).refresh(); + new KennelData(getAutoConnection()).refresh(); + new VisitData(getAutoConnection()).refresh(); + + + } + + public void testSimple() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + + // Build the select command + Command selectCommand = das.createCommand("select * from DOG"); + + // Get the graph + DataObject root = selectCommand.executeQuery(); + + assertEquals(3, root.getList("DOG").size()); + + } + + public void testSimple2() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + + // Build the select command + Command selectCommand = das.createCommand("select * from OWNER"); + + // Get the graph + DataObject root = selectCommand.executeQuery(); + + assertEquals(3, root.getList("OWNER").size()); + + } + + public void testSimple3() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + + // Build the select command + Command selectCommand = das.createCommand("select * from OWNER, DOG " + + "where DOG.OWNER_ID = OWNER.ID and OWNER.NAME = 'Fanny'"); + + // Get the graph + DataObject root = selectCommand.executeQuery(); + + //Get Fanny + DataObject fanny = root.getDataObject("OWNER[1]"); + assertEquals("Fido", fanny.getString("DOG[1]/NAME")); + + } + + public void testSimple4() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + + // Build the select command + Command selectCommand = das.createCommand("select * from KENNEL"); + + // Get the graph + DataObject root = selectCommand.executeQuery(); + + assertEquals(3, root.getList("KENNEL").size()); + + } + + public void testSimple5() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + + // Build the select command + Command selectCommand = das.createCommand("select * from VISIT"); + + // Get the graph + DataObject root = selectCommand.executeQuery(); + + assertEquals(3, root.getList("VISIT").size()); + assertEquals(TestData.getTimestamp("2006-10-20 00:00:00.0"), (Timestamp)root.get("VISIT[1]/CHECK_IN")); + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java new file mode 100644 index 0000000000..425995a68b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ConfigHelper; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.config.Config; +import org.apache.tuscany.das.rdb.config.ConfigFactory; +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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfig.xml"), getConnection()); + // Read a book instance + Command select = das.getCommand("select book 1"); + 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 = das.getCommand("update book 1"); + update.setParameter(1, new Integer(100)); + update.execute(); + + // Try to apply changes and catch the expected An update collision occurred + try { + das.applyChanges(root); + fail("An OCCException should be thrown"); + } catch (RuntimeException ex) { + if (!ex.getMessage().equals("An update collision occurred")) { + throw ex; + } + } + } + + public void testManagedOCC() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection()); + Command select = das.getCommand("select book 1"); + DataObject root = select.executeQuery(); + DataObject book = root.getDataObject("BOOK[1]"); + // Change a field to mark the instance 'dirty' + book.setInt("QUANTITY", 2); + int occValue = book.getInt("OCC"); + das.applyChanges(root); + + root = select.executeQuery(); + book = root.getDataObject("BOOK[1]"); + assertEquals(occValue + 1, book.getInt("OCC")); + } + + public void testManagedOCCFailure() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection()); + // Read a book instance + Command select = das.getCommand("select book 1"); + DataObject root = select.executeQuery(); + DataObject book = root.getDataObject("BOOK[1]"); + // Change a field to mark the instance 'dirty' + book.setInt("QUANTITY", 2); + + DAS das2 = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection()); + // Read a book instance + Command select2 = das2.getCommand("select book 1"); + DataObject root2 = select2.executeQuery(); + DataObject book2 = root2.getDataObject("BOOK[1]"); + // Change a field to mark the instance 'dirty' + book2.setInt("QUANTITY", 5); + das2.applyChanges(root2); + + // Try to apply changes and catch the expecetd An update collision occurred + try { + das.applyChanges(root); + fail("An OCCException should be thrown"); + } catch (RuntimeException ex) { + if (!ex.getMessage().equals("An update collision occurred")) { + throw ex; + } + } + } + + public void testProvidedConfig() throws Exception { + // Create config programmatically + Config config = ConfigFactory.INSTANCE.createConfig(); + ConfigHelper helper = new ConfigHelper(config); + helper.addPrimaryKey("BOOK.BOOK_ID"); + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + + // Read a book instance + Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1"); + 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 + + das.applyChanges(root); + + // Verify + root = select.executeQuery(); + book = root.getDataObject("BOOK[1]"); + assertEquals(2, book.getInt("QUANTITY")); + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java new file mode 100644 index 0000000000..2a58ca0fba --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java @@ -0,0 +1,174 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); + + Command read = das.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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); + + Command read = das.getCommand("get named employee with company"); + read.setParameter(1, "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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); + + Command read = das.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 + das.applyChanges(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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); + + Command read = das.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 + das.applyChanges(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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection()); + + Command read = das.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 + das.applyChanges(root); + + //Verify + root = read.executeQuery(); + + employee = root.getDataObject("COMPANY[1]/company->employee_opposite"); + + assertEquals("Joe Hotshot", employee.getString("NAME")); + + } + + public void testRestrictedOneToOneRelationship() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("OneToOneRestrictedConfig.xml"), getConnection()); + + Command read = das.getCommand("get named employee with company"); + read.setParameter(1, "Mary Smith"); + DataObject root = read.executeQuery(); + DataObject mary = root.getDataObject("EMPLOYEE[1]"); + DataObject company = mary.getDataObject("company"); + + DataObject bob = root.createDataObject("EMPLOYEE"); + bob.setString("NAME", "bob"); + bob.setString("SN", "E0005"); + bob.setInt("MANAGER", 0); + + bob.setDataObject("company", company); + + try { + das.applyChanges(root); + fail("Relationship modification should not be allowed."); + } catch (RuntimeException ex) { + assertEquals("Can not modify a one to one relationship that is key restricted", ex.getMessage()); + } + assertEquals("ACME Publishing", company.getString("NAME")); + + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java new file mode 100644 index 0000000000..ccfae70bd5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.Iterator; +import java.util.List; + +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.DAS; +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 { + + public OperationOrderingTests() { + super(); + } + + 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 void testInsert() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection()); + Command select = das.createCommand("Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID"); + 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); + + das.applyChanges(root); + + root = select.executeQuery(); + assertEquals(numberOfCities + 1, root.getList("CITIES").size()); + assertEquals(numberOfStates + 1, root.getList("STATES").size()); + } + + public void testDeletes() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection()); + Command select = das.createCommand("Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID"); + DataObject root = select.executeQuery(); + + DataObject firstState = root.getDataObject("STATES[1]"); + String stateName = firstState.getString("NAME"); + + List cityNames = new ArrayList(); + Iterator i = firstState.getList("cities").iterator(); + while (i.hasNext()) { + DataObject firstCity = (DataObject) i.next(); + cityNames.add(firstCity.getString("NAME")); + firstCity.delete(); + } + firstState.delete(); + + das.applyChanges(root); + + root = select.executeQuery(); + + Iterator iter = root.getList("STATES").iterator(); + while (iter.hasNext()) { + DataObject state = (DataObject) iter.next(); + assertFalse(state.getString("NAME").equals(stateName)); + } + + iter = root.getList("CITIES").iterator(); + while (iter.hasNext()) { + DataObject city = (DataObject) iter.next(); + assertFalse(cityNames.contains(city.getString("NAME"))); + } + + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java new file mode 100644 index 0000000000..f84d84c0bc --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Build command to read all customers + Command custCommand = das.createCommand("select * from CUSTOMER order by ID"); + + // 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Build the select command + Command select = das.createCommand("select * from CUSTOMER order by ID"); + + // 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java new file mode 100644 index 0000000000..e43d773ada --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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 { + + public PartialUpdateTests() { + super(); + } + + protected void setUp() throws Exception { + super.setUp(); + new CustomerData(getAutoConnection()).refresh(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testPartialUpdate() throws SQLException { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); + + // Read + DataObject root = readCustomers.executeQuery(); + + DataObject customer = root.getDataObject("CUSTOMER[1]"); + // Verify + assertEquals(1, customer.getInt("ID")); + + Command update = das.createCommand("update CUSTOMER set LASTNAME = 'modified' where ID = 1"); + update.execute(); + + customer.setString("ADDRESS", "main street"); + + das.applyChanges(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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); + + // Read + DataObject root = readCustomers.executeQuery(); + + // Create a new customer + DataObject newCust = root.createDataObject("CUSTOMER"); + newCust.set("ID", Integer.valueOf(100)); + newCust.set("ADDRESS", "5528 Wells Fargo Drive"); + // Purposely do not set lastname to let it default to 'Garfugengheist' + // newCust.set("LASTNAME", "Gerkin" ); + + das.applyChanges(root); + + Command readNewCust = das.createCommand("select * from CUSTOMER where ID = 100"); + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java new file mode 100644 index 0000000000..270f46ddd8 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.DAS; +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(); + + DAS das = DAS.FACTORY.createDAS(getConfig("passiveConnection.xml"), c); + // Read customer 1 + Command select = das.getCommand("get a customer"); + DataObject root = select.executeQuery(); + + DataObject customer = (DataObject) root.get("CUSTOMER[1]"); + + String lastName = customer.getString("LASTNAME"); + + // Modify customer + customer.set("LASTNAME", "Pavick"); + + try { + das.applyChanges(root); + + throw new Exception("Test Exception"); + + // Since the DAS is not managing tx boundaries, I must + } catch (Exception e) { + // assert here to make sure we didn't run into some hidden error + assertEquals("Test Exception", e.getMessage()); + // Roll back the transaction + c.rollback(); + } + + // Verify that the changes did not go through + root = select.executeQuery(); + assertEquals(lastName, root.getString("CUSTOMER[1]/LASTNAME")); + + // Try again + customer = (DataObject) root.get("CUSTOMER[1]"); + customer.set("LASTNAME", "Pavick"); + das.applyChanges(root); + c.commit(); + + root = select.executeQuery(); + assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME")); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java new file mode 100644 index 0000000000..7f44399187 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java @@ -0,0 +1,299 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.ConfigHelper; +import org.apache.tuscany.das.rdb.DAS; +import org.apache.tuscany.das.rdb.config.Config; +import org.apache.tuscany.das.rdb.config.ConnectionInfo; +import org.apache.tuscany.das.rdb.config.Table; +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 test1() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Read a book instance + Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1"); + DataObject root = select.executeQuery(); + + DataObject book = root.getDataObject("BOOK[1]"); + // Change a field to mark the instance 'dirty' + book.setInt("QUANTITY", 2); + + try { + das.applyChanges(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 test2() throws Exception { + // Create config programmatically + ConfigHelper helper = new ConfigHelper(); + helper.addPrimaryKey("BOOK.BOOK_ID"); + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + + // Read a book instance + Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1"); + 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 + + das.applyChanges(root); + + // Verify + root = select.executeQuery(); + book = root.getDataObject("BOOK[1]"); + assertEquals(2, book.getInt("QUANTITY")); + } + + /** + * Test ability to read a compound graph + */ + public void test3() 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"); + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + Command select = das.createCommand(statement); + + 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 test4() throws Exception { + + String statement = "SELECT * FROM BOOK WHERE BOOK.BOOK_ID = ?"; + + // Create Table config programmatically + ConfigHelper helper = new ConfigHelper(); + helper.addTable("BOOK", "Book"); + helper.addPrimaryKey("Book.BOOK_ID"); + + DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection()); + Command select = das.createCommand(statement); + select.setParameter(1, Integer.valueOf(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); + + das.applyChanges(root); + + //Verify + select.setParameter(1, Integer.valueOf(1001)); + root = select.executeQuery(); + assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME")); + + } + + /** + * Simple unit test for ConnectionInfo + * @throws Exception + */ + public void testConnectionInfo() throws Exception { + ConfigHelper helper = new ConfigHelper(); + helper.addConnectionInfo("jdbc/adatasource"); + + Config config = helper.getConfig(); + ConnectionInfo info = config.getConnectionInfo(); + assertEquals(info.getDataSource(), "jdbc/adatasource"); + assertEquals(info.isManagedtx(), true); + } + + /** + * Simple unit test for ConnectionInfo + * @throws Exception + */ + public void testConnectionInfo2() throws Exception { + ConfigHelper helper = new ConfigHelper(); + helper.addConnectionInfo("jdbc/adatasource", false); + + Config config = helper.getConfig(); + ConnectionInfo info = config.getConnectionInfo(); + assertEquals(info.getDataSource(), "jdbc/adatasource"); + assertEquals(info.isManagedtx(), false); + } + + /** + * Simple unit test for adding a select command + * @throws Exception + */ + public void testAddSelectCommand() throws Exception { + ConfigHelper helper = new ConfigHelper(); + helper.addSelectCommand("get all customers", "select * from customers"); + + Config config = helper.getConfig(); + List commands = config.getCommand(); + assertEquals(1, commands.size()); + org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); + assertEquals("select", cmd.getKind()); + assertEquals("get all customers", cmd.getName()); + assertEquals("select * from customers", cmd.getSQL()); + } + + /** + * Simple unit test for adding an update command + * @throws Exception + */ + public void testAddUpdateCommand() throws Exception { + ConfigHelper helper = new ConfigHelper(); + helper.addUpdateCommand("update a customer", "update customers set name = ? where id = ?"); + + Config config = helper.getConfig(); + List commands = config.getCommand(); + assertEquals(1, commands.size()); + org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); + assertEquals("update", cmd.getKind()); + assertEquals("update a customer", cmd.getName()); + assertEquals("update customers set name = ? where id = ?", cmd.getSQL()); + } + + /** + * Simple unit test for adding an insert command + * @throws Exception + */ + public void testAddInsertCommand() throws Exception { + ConfigHelper helper = new ConfigHelper(); + helper.addInsertCommand("insert customer", "insert into customers(ID,NAME) values (?,?)"); + + Config config = helper.getConfig(); + List commands = config.getCommand(); + assertEquals(1, commands.size()); + org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); + assertEquals("insert", cmd.getKind()); + assertEquals("insert customer", cmd.getName()); + assertEquals("insert into customers(ID,NAME) values (?,?)", cmd.getSQL()); + } + + /** + * Simple unit test for adding a delete command + * @throws Exception + */ + public void testAddDeleteCommand() throws Exception { + ConfigHelper helper = new ConfigHelper(); + helper.addDeleteCommand("delete customer", "delete from customers where id = ?"); + + Config config = helper.getConfig(); + List commands = config.getCommand(); + assertEquals(1, commands.size()); + org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0); + assertEquals("delete", cmd.getKind()); + assertEquals("delete customer", cmd.getName()); + assertEquals("delete from customers where id = ?", cmd.getSQL()); + } + + /** + * Simple unit test for DataObjectModel + * @throws Exception + */ + public void testDataObjectModel() throws Exception { + ConfigHelper helper = new ConfigHelper(); + helper.setDataObjectModel("org.apache.tuscany/mytypes"); + + Config config = helper.getConfig(); + assertEquals("org.apache.tuscany/mytypes", config.getDataObjectModel()); + + } + + /** + * Simple unit test for adding a Delete statement to a Table + * @throws Exception + */ + public void testAddDeleteStatement() throws Exception { + ConfigHelper helper = new ConfigHelper(); + Table table = helper.addTable("widgets", "WIDGETS"); + helper.addDeleteStatement(table, "delete from widgets where id = ?", "ID"); + + Config cfg = helper.getConfig(); + assertEquals(1, cfg.getTable().size()); + Table widgets = (Table) cfg.getTable().get(0); + assertEquals("delete from widgets where id = ?", widgets.getDelete().getSql()); + assertEquals("WIDGETS", widgets.getTypeName()); + assertEquals("ID", widgets.getDelete().getParameters()); + + } + + /** + * Simple unit test for adding a Create statement to a Table + * @throws Exception + */ + public void testAddCreateStatement() throws Exception { + ConfigHelper helper = new ConfigHelper(); + Table table = helper.addTable("widgets", "WIDGETS"); + helper.addCreateStatement(table, "insert into widgets values (?,?)", "ID NAME"); + + Config cfg = helper.getConfig(); + assertEquals(1, cfg.getTable().size()); + Table widgets = (Table) cfg.getTable().get(0); + assertEquals("insert into widgets values (?,?)", widgets.getCreate().getSql()); + assertEquals("WIDGETS", widgets.getTypeName()); + assertEquals("ID NAME", widgets.getCreate().getParameters()); + + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java new file mode 100644 index 0000000000..6fb52ad17d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command select = das.createCommand("SELECT * from SYSIBM.SYSTABLES WHERE TYPE = 'T'"); + DataObject root = select.executeQuery(); + + DataObject table = (DataObject) root.get("SYSTABLES[1]"); + + assertEquals('T', table.getChar("TYPE")); + + } + + //Utilities + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java new file mode 100644 index 0000000000..4af085a6a5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +import org.apache.tuscany.das.rdb.test.data.PartData; +import org.apache.tuscany.das.rdb.test.framework.DasTest; + +import commonj.sdo.DataObject; + +public class RecursiveTests extends DasTest { + + protected void setUp() throws Exception { + super.setUp(); + new PartData(getAutoConnection()).refresh(); + } + + public void testReadEngineParts() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConfig("PartsConfig.xml"), getConnection()); + // Table definition + // CREATE TABLE PART (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), QUANTITY INT, PARENT_ID INT ); + + Command select = das.getCommand("readEngineParts"); + + // 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java new file mode 100644 index 0000000000..426b5fbbf0 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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"; + + DAS das = DAS.FACTORY.createDAS(getConfig("customerOrderRelationshipMapping.xml"), getConnection()); + // Read some customers and related orders + Command select = das.createCommand(statement); + + 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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerOrderMapping.xml"), getConnection()); + // Read some customers and related orders + Command select = das + .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID"); + + 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 = Integer.valueOf(cust1.getList("orders").size()); + Integer cust2OrderCount = Integer.valueOf(cust2.getList("orders").size()); + + // Move an order to cust1 from cust2 + DataObject order = (DataObject) cust2.getList("orders").get(0); + cust1.getList("orders").add(order); + + // Flush changes + das.applyChanges(root); + + // verify cust1 relationship updates + select = das + .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON " + + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"); + select.setParameter(1, cust1ID); + + root = select.executeQuery(); + assertEquals(cust1OrderCount.intValue() + 1, root.getList("CUSTOMER[1]/orders").size()); + + // verify cust2 relationship updates + select.setParameter(1, cust2ID); + root = select.executeQuery(); + assertEquals(cust2OrderCount.intValue() - 1, root.getList("CUSTOMER[1]/orders").size()); + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java new file mode 100644 index 0000000000..b259fc4e2d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +import org.apache.tuscany.das.rdb.test.data.CustomerData; +import org.apache.tuscany.das.rdb.test.framework.DasTest; + +import commonj.sdo.DataObject; + +/** + * 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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfigWithIDConverter.xml"), getConnection()); + // Create and initialize command to read customers + Command readCustomers = das.getCommand("literal"); + + // 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"; + + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Create and initialize command to read customers + Command readCustomers = das.createCommand(sqlString); + + // 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java new file mode 100644 index 0000000000..ca6174956e --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java new file mode 100644 index 0000000000..32c60a2760 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java @@ -0,0 +1,228 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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 + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); + + // Read + DataObject root = readCustomers.executeQuery(); + + // Verify + assertEquals(1, root.getInt("CUSTOMER[1]/ID")); + } + + /** + * Read a specific customer + */ + public void testReadSingle2() throws Exception { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Create and initialize command to read customers + Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1"); + + // Read + DataObject root = readCustomers.executeQuery(); + + // 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Create and initialize command to read customers + Command readCustomers = das.createCommand(" select * from CUSTOMER where ID = 1"); + + // 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 { + + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Create and initialize command to read customers + Command readCustomers = das.createCommand("select * from CUSTOMER where LASTNAME = 'Williams'"); + + // 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Create and initialize command to read customers + Command readCustomers = das.createCommand("select * from CUSTOMER where LASTNAME = ?"); + + // Parameterize the command + readCustomers.setParameter(1, "Williams"); + DataObject root = readCustomers.executeQuery(); + + // Verify + assertEquals(4, root.getList("CUSTOMER").size()); + } + + public void testInsert() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into CUSTOMER values (10, 'Williams', '5528 Wells Fargo Dr')"); + insert.execute(); + + // Verify + Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); + 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)"); + insert.setParameter(1, Integer.valueOf(10)); + insert.setParameter(2, "Williams"); + insert.setParameter(3, "5528 Wells Fargo Dr"); + insert.execute(); + + // Verify + Command select = das.createCommand("Select * from CUSTOMER where ID = 10"); + 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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Verify pre-condition + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + assertEquals(1, root.getList("CUSTOMER").size()); + + // Create and execute the delete command + Command delete = das.createCommand("delete from CUSTOMER where ID = 1"); + delete.execute(); + + // Verify delete by reusing the original select command + root = select.executeQuery(); + assertEquals(0, root.getList("CUSTOMER").size()); + + } + + public void testUpdate() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Verify pre-condition + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick")); + + Command update = das.createCommand("update CUSTOMER set LASTNAME = 'Pavick' where ID = 1"); + update.execute(); + + // Verify update - reuse select command + root = select.executeQuery(); + assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME")); + + } + + public void testUpdateWithParameters() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Verify pre-condition + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick")); + + Command update = das.createCommand("update CUSTOMER set LASTNAME = ? where ID = ?"); + update.setParameter(1, "Pavick"); + update.setParameter(2, Integer.valueOf(1)); + update.execute(); + + // Verify update - reuse select command + root = select.executeQuery(); + assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME")); + + } + + public void testUpdateWithParmarkers() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Verify pre-condition + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick")); + + Command update = das.createCommand("update CUSTOMER set LASTNAME = ? where ID = ?"); + update.setParameter(1, "Pavick"); + update.setParameter(2, Integer.valueOf(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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java new file mode 100644 index 0000000000..b085906bd0 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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(); + } + + public void testMultipleResultSets() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command read = das.createCommand("{call GETALLCUSTOMERSANDORDERS()}"); + + DataObject root = read.executeQuery(); + + // Verify + assertEquals(5, root.getList("CUSTOMER").size()); + assertEquals(4, root.getList("ANORDER").size()); + } + + // Call a simple stored proc to read all companies + public void testGetCompanies() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command read = das.createCommand("{call GETALLCOMPANIES()}"); + + DataObject root = read.executeQuery(); + + // Verify + assertEquals(3, root.getList("COMPANY").size()); + assertTrue(root.getInt("COMPANY[1]/ID") > 0); + + } + + public void testGetNamedCompany() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command read = das.createCommand("{call GETNAMEDCOMPANY(?)}"); + + read.setParameter(1, "MegaCorp"); + DataObject root = read.executeQuery(); + + assertEquals("MegaCorp", root.getString("COMPANY[1]/NAME")); + + } + + public void testGetNamedCompanyByName() throws Exception { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command read = das.createCommand("{call GETNAMEDCOMPANY(?)}"); + + read.setParameter(1, "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 { + DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection()); + Command read = das.createCommand("{call getCustomerAndOrders(?)}"); + read.setParameter(1, Integer.valueOf(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 { + DAS das = DAS.FACTORY.createDAS(getConfig("storedProcTest.xml"), getConnection()); + Command read = das.getCommand("getNamedCustomers"); + read.setParameter(1, "Williams"); + DataObject root = read.executeQuery(); + + Integer customersRead = (Integer) read.getParameter(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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + Command delete = das.createCommand("{call DELETECUSTOMER(?)}"); + delete.setParameter(1, Integer.valueOf(1)); + delete.execute(); + + // Verify DELETE + Command select = das.createCommand("Select * from CUSTOMER where ID = 1"); + DataObject root = select.executeQuery(); + assertTrue(root.getList("CUSTOMER").isEmpty()); + + } + +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java new file mode 100644 index 0000000000..d9f880e92d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +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.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; + +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 { + + DAS das = DAS.FACTORY.createDAS(getConfig("staticCustomerOrder.xml"), getConnection()); + + Command select = das.getCommand("Customer and Orders"); + + SDOUtil.registerStaticTypes(CustomerFactory.class); + + // Parameterize the command + select.setParameter(1, Integer.valueOf(1)); + + // Get the graph - DataGraphRoot is from the typed package + DataObject root = select.executeQuery(); + + // Modify a customer + Customer customer = (Customer) root.getDataObject("Customer[1]"); + customer.setLastName("Pavick"); + + // Modify an order + AnOrder order = (AnOrder) customer.getOrders().get(0); + order.setProduct("Kitchen Sink 001"); + + // Flush changes + das.applyChanges((DataObject) root); + + } + +} \ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java new file mode 100644 index 0000000000..e6972357f6 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.Command; +import org.apache.tuscany.das.rdb.DAS; +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 { + DAS das = DAS.FACTORY.createDAS(getConnection()); + // Read customer 1 + Command select = das.createCommand("Select * from TYPETEST where ID = 1"); + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java new file mode 100644 index 0000000000..f98e014ca9 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; + +public class ReadCustomersByLastnameCommand extends ReadCommandImpl { + + private static final String SQL_STRING = "select * from CUSTOMER where LASTNAME = ?"; + + private static final Config CONFIG; + + static { + ConfigFactory factory = ConfigFactory.INSTANCE; + CONFIG = factory.createConfig(); + Table t = factory.createTable(); + Column id = factory.createColumn(); + id.setColumnName("ID"); + id.setPrimaryKey(true); + Column lastname = factory.createColumn(); + lastname.setColumnName("LASTNAME"); + Column address = factory.createColumn(); + address.setColumnName("ADDRESS"); + + t.getColumn().add(id); + t.getColumn().add(lastname); + t.getColumn().add(address); + t.setTableName("CUSTOMER"); + CONFIG.getTable().add(t); + } + + public ReadCustomersByLastnameCommand() { + super(SQL_STRING, new MappingWrapper(CONFIG), null); + } +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java new file mode 100644 index 0000000000..7a4b8f49dd --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; + +public class ReadCustomersCommand extends ReadCommandImpl { + + private static final String SQL_STRING = "select * from CUSTOMER"; + + private static final Config CONFIG; + + static { + ConfigFactory factory = ConfigFactory.INSTANCE; + CONFIG = factory.createConfig(); + Table t = factory.createTable(); + Column id = factory.createColumn(); + id.setColumnName("ID"); + id.setPrimaryKey(true); + Column lastname = factory.createColumn(); + lastname.setColumnName("LASTNAME"); + Column address = factory.createColumn(); + address.setColumnName("ADDRESS"); + + t.getColumn().add(id); + t.getColumn().add(lastname); + t.getColumn().add(address); + t.setTableName("CUSTOMER"); + CONFIG.getTable().add(t); + } + + public ReadCustomersCommand() { + super(SQL_STRING, new MappingWrapper(CONFIG), null); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java new file mode 100644 index 0000000000..407a43c21f --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; + +public class ReadCustomersStaticTypesCommand extends ReadCommandImpl { + + private static final String SQL_STRING = "Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = ?"; + + private static final Config CONFIG; + + static { + ConfigFactory factory = ConfigFactory.INSTANCE; + CONFIG = factory.createConfig(); + Table t = factory.createTable(); + Column id = factory.createColumn(); + id.setColumnName("ID"); + id.setPrimaryKey(true); + Column lastname = factory.createColumn(); + lastname.setColumnName("LASTNAME"); + Column address = factory.createColumn(); + address.setColumnName("ADDRESS"); + + t.getColumn().add(id); + t.getColumn().add(lastname); + t.getColumn().add(address); + t.setTableName("CUSTOMER"); + t.setTypeName("Customer"); + CONFIG.getTable().add(t); + + CONFIG.setDataObjectModel("http:///org.apache.tuscany.das.rdb.test/customer.xsd"); + } + + public ReadCustomersStaticTypesCommand() { + super(SQL_STRING, new MappingWrapper(CONFIG), null); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java new file mode 100644 index 0000000000..ba771ca3e5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.ArrayList; +import java.util.List; + +import org.apache.tuscany.das.rdb.config.ConfigFactory; +import org.apache.tuscany.das.rdb.config.ResultDescriptor; +import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; + +public class ReadCustomersWithShapeCommand extends ReadCommandImpl { + // This sql string ensures that we won't have resultset metadata + static String sqlString = "select * from customer union select * from customer"; + + static List descriptor = new ArrayList(); + + static { + ConfigFactory factory = ConfigFactory.INSTANCE; + + ResultDescriptor desc1 = factory.createResultDescriptor(); + desc1.setColumnName("ID"); + desc1.setColumnType("commonj.sdo.Int"); + desc1.setTableName("CUSTOMER"); + + ResultDescriptor desc2 = factory.createResultDescriptor(); + desc2.setColumnName("LASTNAME"); + desc2.setColumnType("commonj.sdo.String"); + desc2.setTableName("CUSTOMER"); + + ResultDescriptor desc3 = factory.createResultDescriptor(); + desc3.setColumnName("ADDRESS"); + desc3.setColumnType("commonj.sdo.String"); + desc3.setTableName("CUSTOMER"); + + descriptor.add(desc1); + descriptor.add(desc2); + descriptor.add(desc3); + + } + + public ReadCustomersWithShapeCommand() { + super(sqlString, new MappingWrapper(), descriptor); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java new file mode 100644 index 0000000000..44eea42445 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.util.ArrayList; +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.ConfigFactory; +import org.apache.tuscany.das.rdb.config.ResultDescriptor; +import org.apache.tuscany.das.rdb.config.Table; +import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper; +import org.apache.tuscany.das.rdb.impl.ReadCommandImpl; + +public class SimpleReadCustomersWithShapeCommand extends ReadCommandImpl { + + // This sql string ensures that we won't have resultset metadata + private static final String SQL_STRING = "Select * from customer union select * from customer"; + + private static final List DESCRIPTOR = new ArrayList(); + + private static final Config CONFIG; + + static { + ConfigFactory factory = ConfigFactory.INSTANCE; + CONFIG = factory.createConfig(); + Table t = factory.createTable(); + Column id = factory.createColumn(); + id.setColumnName("ID"); + id.setPrimaryKey(true); + Column lastname = factory.createColumn(); + lastname.setColumnName("LASTNAME"); + Column address = factory.createColumn(); + address.setColumnName("ADDRESS"); + + t.getColumn().add(id); + t.getColumn().add(lastname); + t.getColumn().add(address); + t.setTableName("CUSTOMER"); + CONFIG.getTable().add(t); + + ResultDescriptor desc1 = factory.createResultDescriptor(); + desc1.setColumnName("ID"); + desc1.setColumnType("commonj.sdo.Int"); + desc1.setTableName("CUSTOMER"); + + ResultDescriptor desc2 = factory.createResultDescriptor(); + desc2.setColumnName("LASTNAME"); + desc2.setColumnType("commonj.sdo.String"); + desc2.setTableName("CUSTOMER"); + + ResultDescriptor desc3 = factory.createResultDescriptor(); + desc3.setColumnName("ADDRESS"); + desc3.setColumnType("commonj.sdo.String"); + desc3.setTableName("CUSTOMER"); + + DESCRIPTOR.add(desc1); + DESCRIPTOR.add(desc2); + DESCRIPTOR.add(desc3); + } + + public SimpleReadCustomersWithShapeCommand() { + super(SQL_STRING, new MappingWrapper(CONFIG), DESCRIPTOR); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java new file mode 100644 index 0000000000..632a4d057d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 = {{Integer.valueOf(1), "The Brothers Karamazov", "Fyodor Dostoevsky", + Integer.valueOf(5), Integer.valueOf(17)}, + {Integer.valueOf(2), "Cat in the Hat", "Doctor Seuss", Integer.valueOf(10), Integer.valueOf(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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java new file mode 100644 index 0000000000..7ce5cf757d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 = {{Integer.valueOf(1), "Lizard Lick", "1"}, + {Integer.valueOf(2), "Morrisville", "1"}, + {Integer.valueOf(3), "Breckenridge", "2"}, + {Integer.valueOf(4), "Barstow", "3"}, + {Integer.valueOf(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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java new file mode 100644 index 0000000000..0c28ed2caa --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java new file mode 100644 index 0000000000..686e3243cb --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 { + + private 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java new file mode 100644 index 0000000000..b1d3fb12b5 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 { + + protected 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java new file mode 100644 index 0000000000..9ec6c8003d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 = {{Integer.valueOf(1), "Williams", "1212 foobar lane"}, + {Integer.valueOf(2), "Daniel", "156 Brentfield Loop"}, {Integer.valueOf(3), "Williams", "456 penny lane"}, + {Integer.valueOf(4), "Williams", "5000 pineville"}, {Integer.valueOf(5), "Williams", "100000 firefly lane"}}; + + public CustomerData(Connection connection) { + super(connection, customerData); + } + + public String getTableName() { + return "CUSTOMER"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java new file mode 100644 index 0000000000..ad8ff14e86 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java new file mode 100644 index 0000000000..906a30cc06 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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", "DEPNUMBER"}; + + public DepartmentData(Connection connection) { + super(connection, deptData, deptColumns, columnTypes); + } + + public String getTableName() { + return "DEPARTMENT"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java new file mode 100644 index 0000000000..3c686e6fea --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 DogData extends TestDataWithExplicitColumns { + + /* CREATE TABLE DOG ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + OWNER_ID INTEGER UNSIGNED NOT NULL, + NAME VARCHAR(20) NOT NULL, + BREED VARCHAR(20) NULL, + OCC_COUNT INTEGER UNSIGNED NULL, + PRIMARY KEY(ID), + );*/ + + //id and owner_id omitted. id is auto-generated. owner_id is filled in by DogOwner data + private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.INTEGER}; + + private static Object[][] data = {{"Fido", "Mutt", Integer.valueOf(1)}, + {"Max", "German Shepherd", Integer.valueOf(1)}, + {"Saddie", "Collie", Integer.valueOf(1)}}; + + private static String[] columns = {"NAME", "BREED", "OCC_COUNT"}; + + public DogData(Connection connection) { + super(connection, data, columns, columnTypes); + } + + public String getTableName() { + return "DOG"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java new file mode 100644 index 0000000000..8c53dea790 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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", Boolean.valueOf(false)}, + {"Mary Smith", "E0002", Boolean.valueOf(true)}, + {"Jane Doe", "E0003", Boolean.valueOf(false)}, {"Al Smith", "E0004", Boolean.valueOf(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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java new file mode 100644 index 0000000000..01423ee40e --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 KennelData extends TestDataWithExplicitColumns { + + /* CREATE TABLE KENNEL ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + KNUMBER INTEGER UNSIGNED NULL, + KIND VARCHAR(20) NULL, + OCC_COUNT INTEGER UNSIGNED NULL, + PRIMARY KEY(ID) + );*/ + + //id omitted. id is auto-generated. + private static int[] columnTypes = {Types.INTEGER, Types.VARCHAR, Types.INTEGER}; + + private static Object[][] data = {{Integer.valueOf(100), "Small", Integer.valueOf(1)}, + {Integer.valueOf(101), "Small", Integer.valueOf(1)}, + {Integer.valueOf(102), "Large", Integer.valueOf(1)}}; + + private static String[] columns = {"KNUMBER", "KIND", "OCC_COUNT"}; + + public KennelData(Connection connection) { + super(connection, data, columns, columnTypes); + } + + public String getTableName() { + return "KENNEL"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java new file mode 100644 index 0000000000..2568dd1a9f --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 { + + protected static Object[][] orderData = { + {Integer.valueOf(1), "recombobulator", Integer.valueOf(47), Integer.valueOf(1)}, + {Integer.valueOf(2), "wrench", Integer.valueOf(17), Integer.valueOf(3)}, + {Integer.valueOf(3), "pliers", Integer.valueOf(500), Integer.valueOf(1)}, + {Integer.valueOf(4), "Tooth Paste", Integer.valueOf(12), Integer.valueOf(2)}}; + + public OrderData(Connection c) { + super(c, orderData); + } + + public String getTableName() { + return "ANORDER"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java new file mode 100644 index 0000000000..9f5897b373 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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)) + + protected static Object[][] orderDetailsData = {{Integer.valueOf(1), Integer.valueOf(1), new Float(1.1)}, + {Integer.valueOf(1), Integer.valueOf(2), new Float(1.2)}, + {Integer.valueOf(2), Integer.valueOf(1), new Float(2.1)}, + {Integer.valueOf(2), Integer.valueOf(2), new Float(2.2)}}; + + public OrderDetailsData(Connection c) { + super(c, orderDetailsData); + } + + public String getTableName() { + return "ORDERDETAILS"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java new file mode 100644 index 0000000000..b5198bce36 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 OwnerData extends TestDataWithExplicitColumns { + + /* CREATE TABLE OWNER ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + NAME VARCHAR(20) NULL, + CONTACT_PHONE VARCHAR(20) NULL, + OCC_COUNT INTEGER UNSIGNED NULL, + PRIMARY KEY(ID) + );*/ + + //id omitted. id is auto-generated. + private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.INTEGER}; + + private static Object[][] data = {{"Fanny", "222-2222", Integer.valueOf(1)}, + {"Manny", "333-3333", Integer.valueOf(1)}, + {"Sammy", "444-4444", Integer.valueOf(1)}}; + + private static String[] columns = {"NAME", "CONTACT_PHONE", "OCC_COUNT"}; + + public OwnerData(Connection connection) { + super(connection, data, columns, columnTypes); + } + + public String getTableName() { + return "OWNER"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java new file mode 100644 index 0000000000..a06a2124f3 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 OwnerDogData extends RelationshipData { + + private static final Object[][] DATA = {{"Fanny", "Fido"}, {"Manny", "Max"}, {"Sammy", "Saddie"}}; + + public OwnerDogData(Connection c) { + super(c, DATA); + } + + protected String getParentRetrievalStatement() { + return "select ID from OWNER where NAME = ?"; + } + + protected String getChildUpdateStatement() { + return "update DOG set OWNER_ID = ? where NAME = ?"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java new file mode 100644 index 0000000000..ff59b03aef --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 = {{Integer.valueOf(1), "Engine", Integer.valueOf(1), null}, + {Integer.valueOf(2), "Block", Integer.valueOf(1), Integer.valueOf(1)}, + {Integer.valueOf(3), "Cam Shaft", Integer.valueOf(2), Integer.valueOf(1)}, + {Integer.valueOf(4), "Piston", Integer.valueOf(8), Integer.valueOf(1)}, + {Integer.valueOf(5), "Piston Ring", Integer.valueOf(2), Integer.valueOf(4)}}; + + public PartData(Connection connection) { + super(connection, partData, partColumns, columnTypes); + } + + public String getTableName() { + return "PART"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java new file mode 100644 index 0000000000..713aecb9a3 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 { + private static Object[][] stateData = {{Integer.valueOf(1), "NC"}, {Integer.valueOf(2), "CO"}, + {Integer.valueOf(3), "CA"}}; + + public StateData(Connection c) { + super(c, stateData); + } + + public String getTableName() { + return "STATES"; + } + + + public void doDeletes() throws SQLException { + deleteRowsFromTable(); + } + + public void doInserts() throws SQLException { + insertRows(); + + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java new file mode 100644 index 0000000000..0aac15fb7d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 TypesData extends TestData { + + private static Object[][] customerData = {{Integer.valueOf(1), TIMESTAMP, + new Float(1234567.89), new Float(1234567.89)}}; + + public TypesData(Connection connection) { + super(connection, customerData); + } + + public String getTableName() { + return "TYPETEST"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java new file mode 100644 index 0000000000..c9cebc7688 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 VisitData extends TestDataWithExplicitColumns { + + /* + * CREATE TABLE VISIT ( ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + * CHECK_IN TIMESTAMP NULL, CHECK_OUT TIMESTAMP NULL, OCC_COUNT INTEGER UNSIGNED + * NULL, PRIMARY KEY(ID) ); + */ + + // id omitted. id is auto-generated. + private static int[] columnTypes = {Types.TIMESTAMP, Types.TIMESTAMP, Types.INTEGER}; + + private static Object[][] data = { + {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)}, + {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)}, + {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)}}; + + private static String[] columns = {"CHECK_IN", "CHECK_OUT", "OCC_COUNT"}; + + public VisitData(Connection connection) { + super(connection, data, columns, columnTypes); + } + + public String getTableName() { + return "VISIT"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java new file mode 100644 index 0000000000..370c1d42d7 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java new file mode 100644 index 0000000000..78b1cf19e1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.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 { + + protected static Connection connection; + + /** + * 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() { + + // 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) { + return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName); + } + + protected void write(String label, ResultSet rs) throws 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java new file mode 100644 index 0000000000..9cc012e830 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java @@ -0,0 +1,410 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 Statement s; + + protected String platformName = "Not initialized"; + + protected String driverName = "Not initialized"; + + protected String databaseURL = "Not initialized"; + + protected String userName; + + protected String password; + + // Data Types + protected String stringType = "VARCHAR"; + + protected String integerType = "INT"; + + protected String timestampType = "TIMESTAMP"; + + protected String floatType = "FLOAT"; + + protected String decimalType = "DECIMAL"; + + private Connection connection; + + 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(); + if (userName != null) { + connection = DriverManager.getConnection(databaseURL, userName, password); + } else { + connection = DriverManager.getConnection(databaseURL); + } + connection.setAutoCommit(false); + + } catch (SQLException e) { + + if (e.getNextException() != null) { + e.getNextException().printStackTrace(); + } else { + e.printStackTrace(); + } + + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + + } + + protected void setUp() throws Exception { + + System.out.println("Setting up for " + platformName + " run"); + + s = connection.createStatement(); + + try { + dropTriggers(); + dropSequences(); + dropTables(); + dropProcedures(); + + createSequences(); + createTables(); + createTriggers(); + 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", "DROP TABLE DOG", "DROP TABLE OWNER", + "DROP TABLE KENNEL", "DROP TABLE VISIT" + }; + + 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")) && (!e.getMessage().contains("Unknown table")) + && (!e.getMessage().contains("42704"))) { + throw new RuntimeException(e); + } + } + } + } + + protected void dropTriggers() { + + } + + protected void createTriggers() { + + } + + protected void dropSequences() { + + } + + protected void createSequences() { + + } + + 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", "DROP PROCEDURE GETALLCUSTOMERSANDORDERS" + + }; + + 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") && !e.getMessage().contains("42704")) { + 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()); + + s.execute(getCreateDog()); + s.execute(getCreateOwner()); + s.execute(getCreateKennel()); + s.execute(getCreateVisit()); + + } 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'"); + s.execute("CREATE PROCEDURE GETALLCUSTOMERSANDORDERS() PARAMETER STYLE JAVA LANGUAGE JAVA " + + "READS SQL DATA DYNAMIC RESULT SETS 2 EXTERNAL NAME " + + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getAllCustomersAndAllOrders'"); + // 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 (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " + + getStringColumn("LASTNAME", 30) + + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")"; + } + + protected String getCreateAnOrder() { + return "CREATE TABLE ANORDER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " + + getStringColumn("PRODUCT", 30) + ", " + + getIntegerColumn("QUANTITY") + "," + getIntegerColumn("CUSTOMER_ID") + ")"; + } + + protected String getCreateOrderDetails() { + return "CREATE TABLE ORDERDETAILS (" + getIntegerColumn("ORDERID") + " NOT NULL, " + + getIntegerColumn("PRODUCTID") + + " NOT NULL, PRICE FLOAT, PRIMARY KEY (ORDERID, PRODUCTID))"; + } + + protected String getCreateItem() { + return "CREATE TABLE ITEM (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " + + getStringColumn("NAME", 30) + ")"; + } + + protected String getCreateCompany() { + return "CREATE TABLE COMPANY (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL " + + getGeneratedKeyClause() + " , " + + getStringColumn("NAME", 30) + ", " + getIntegerColumn("EOTMID") + ")"; + } + + protected String getCreateEmployee() { + return "CREATE TABLE EMPLOYEE (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL " + + getGeneratedKeyClause() + "," + + getStringColumn("NAME", 30) + "," + getStringColumn("SN", 10) + ", MANAGER SMALLINT, " + + getIntegerColumn("DEPARTMENTID") + ")"; + } + + protected String getCreateDepartment() { + return "CREATE TABLE DEPARTMENT (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL " + + getGeneratedKeyClause() + ", " + + getStringColumn("NAME", 30) + "," + getStringColumn("LOCATION", 30) + ", " + + getStringColumn("DEPNUMBER", 10) + "," + + getIntegerColumn("COMPANYID") + ")"; + } + + protected String getCreateBook() { + return "CREATE TABLE BOOK (" + getIntegerColumn("BOOK_ID") + " PRIMARY KEY NOT NULL, " + + getStringColumn("NAME", 50) + "," + + getStringColumn("AUTHOR", 30) + ", " + getIntegerColumn("QUANTITY") + "," + + getIntegerColumn("OCC") + ")"; + } + + protected String getCreatePart() { + return "CREATE TABLE PART (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, NAME VARCHAR(50), " + + getIntegerColumn("QUANTITY") + "," + + getIntegerColumn("PARENT_ID") + " )"; + } + + protected String getCreateTypeTest() { + return "CREATE TABLE TYPETEST (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " + + getTimestampColumn("ATIMESTAMP") + "," + + getDecimalColumn("ADECIMAL", 9, 2) + "," + getFloatColumn("AFLOAT") + ")"; + } + + protected String getCreateStates() { + return "CREATE TABLE STATES (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, " + + getStringColumn("NAME", 2) + ")"; + } + + protected String getCreateCities() { + return "CREATE TABLE CITIES (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL," + + getStringColumn("NAME", 50) + "," + + getIntegerColumn("STATE_ID") + "," + getForeignKeyConstraint("STATES", "ID", "STATE_ID") + ")"; + } + + protected String getCreateServerStatus() { + + return "CREATE TABLE CONMGT.SERVERSTATUS (STATUSID INTEGER PRIMARY KEY NOT NULL " + getGeneratedKeyClause() + + " (START WITH 1 ,INCREMENT BY 1), MANAGEDSERVERID INTEGER NOT NULL, TIMESTAMP TIMESTAMP NOT NULL)"; + + } + + // Dog Kennel Schema + + protected String getCreateDog() { + return "CREATE TABLE DOG (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , " + + getIntegerColumn("OWNER_ID") + " , " + + getStringColumn("NAME", 20) + ", " + getStringColumn("BREED", 20) + ", " + + getIntegerColumn("OCC_COUNT") + ", " + + "PRIMARY KEY(ID))"; + } + + protected String getCreateOwner() { + return "CREATE TABLE OWNER (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , " + + getStringColumn("NAME", 20) + ", " + + getStringColumn("CONTACT_PHONE", 20) + ", " + getIntegerColumn("OCC_COUNT") + ", " + + "PRIMARY KEY(ID))"; + } + + protected String getCreateKennel() { + return "CREATE TABLE KENNEL (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + + " , " + getIntegerColumn("KNUMBER") + ", " + + getStringColumn("KIND", 20) + ", " + getIntegerColumn("OCC_COUNT") + ", " + "PRIMARY KEY(ID))"; + } + + protected String getCreateVisit() { + return "CREATE TABLE VISIT (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , " + + getTimestampColumn("CHECK_IN") + + ", " + getTimestampColumn("CHECK_OUT") + ", " + getIntegerColumn("OCC_COUNT") + ", " + + "PRIMARY KEY(ID))"; + } + + // ///////////////// + + protected String getForeignKeyConstraint(String pkTable, String pkColumn, String foreignKey) { + StringBuffer buffer = new StringBuffer(); + buffer.append("CONSTRAINT FK1 FOREIGN KEY ("); + buffer.append(foreignKey); + buffer.append(") REFERENCES "); + buffer.append(pkTable); + buffer.append("("); + buffer.append(pkColumn); + buffer.append(") ON DELETE NO ACTION ON UPDATE NO ACTION"); + return buffer.toString(); + } + + protected String getStringColumn(String name, int length) { + return name + ' ' + stringType + "(" + Integer.valueOf(length).toString() + ")"; + } + + protected String getIntegerColumn(String name) { + return name + ' ' + integerType; + } + + protected String getGeneratedKeyClause() { + return "GENERATED ALWAYS AS IDENTITY"; + } + + protected String getDecimalColumn(String name, int size1, int size2) { + return name + ' ' + decimalType + "(" + Integer.valueOf(size1).toString() + ',' + + Integer.valueOf(size2).toString() + ")"; + } + + protected String getFloatColumn(String name) { + return name + ' ' + floatType; + } + + protected String getTimestampColumn(String name) { + return name + ' ' + timestampType; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java new file mode 100644 index 0000000000..300f315465 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java new file mode 100644 index 0000000000..71a7d1c4e4 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 final class JavaStoredProcs { + + private JavaStoredProcs() { + + } + + public static void getAllCustomersAndAllOrders(ResultSet[] result1, ResultSet[] result2) throws SQLException { + Connection conn = DriverManager.getConnection("jdbc:default:connection"); + PreparedStatement ps = conn.prepareStatement("SELECT * FROM CUSTOMER"); + + result1[0] = ps.executeQuery(); + + PreparedStatement ps2 = conn.prepareStatement("select * from anorder"); + result2[0] = ps2.executeQuery(); + + } + + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java new file mode 100644 index 0000000000..5b1a205523 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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); + + } 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), EOTMID INT)"; + } + + 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)"; + } + + protected String getCreateServerStatus() { + return "CREATE TABLE CONMGT.SERVERSTATUS (STATUSID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, " + + "MANAGEDSERVERID INTEGER NOT NULL, TIMESTAMP TIMESTAMP NOT NULL)"; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java new file mode 100644 index 0000000000..094fe13456 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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; + + protected Connection connection; + + private int currentRow = -1; + + 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; + return currentRow < numberOfRows(); + } + + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java new file mode 100644 index 0000000000..ca1eaf7f37 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public abstract class TestData { + + protected static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:ss:mm.SSS"); + + protected static final Timestamp TIMESTAMP = getTimestamp(); + + protected Object[][] data; + + protected Connection connection; + + private int currentRow = -1; + + + 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; + return currentRow < numberOfRows(); + } + + 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(); + ps.close(); + } + + 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(); + } + ps.close(); + } + + // Utilities + protected static Date getDate() { + + try { + return DATE_FORMAT.parse("1966-12-20 00:00:00.0"); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + protected static Date getDate(String timeStamp) { + + try { + return DATE_FORMAT.parse("1966-12-20 00:00:00.0"); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + public static Timestamp getTimestamp() { + return new Timestamp(getDate().getTime()); + } + + public static Timestamp getTimestamp(String timeStamp) { + return new Timestamp(getDate(timeStamp).getTime()); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java new file mode 100644 index 0000000000..c2ddb27ffd --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.log4j.Logger; +import org.apache.tuscany.das.rdb.util.LoggerFactory; + +public abstract class TestDataWithExplicitColumns extends TestData { + + private String[] columns; + + private int[] sqlTypes; + + private final Logger logger = LoggerFactory.INSTANCE.getLogger(TestDataWithExplicitColumns.class); + + 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("?)"); + + if (this.logger.isDebugEnabled()) { + this.logger.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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java new file mode 100644 index 0000000000..835a2f5e77 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 Integer.valueOf(1); + } + return Integer.valueOf(0); + } + + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java new file mode 100644 index 0000000000..df9d2978eb --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 { + + private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd"); + + private static Date kbday; + + private static Date tbday; + + public SillyDateStringConverter() { + super(); + } + + 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java new file mode 100644 index 0000000000..2be6522fcc --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java new file mode 100644 index 0000000000..a15cef37e6 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java new file mode 100644 index 0000000000..806e152c24 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.tuscany.das.rdb.test.AliasTests; +import org.apache.tuscany.das.rdb.test.BestPracticeTests; +import org.apache.tuscany.das.rdb.test.CUDGeneration; +import org.apache.tuscany.das.rdb.test.CommandGroupTests; +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.ImpliedRelationshipTests; +import org.apache.tuscany.das.rdb.test.KennelTests; +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.typed.SimplestStaticCrud; + +public final class AllCommonTests { + + private 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(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)); + suite.addTest(new TestSuite(AliasTests.class)); + + suite.addTest(new TestSuite(ImpliedRelationshipTests.class)); + + suite.addTest(new TestSuite(KennelTests.class)); + + //$JUnit-END$ + return suite; + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java new file mode 100644 index 0000000000..ea8a2ddbaf --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.tuscany.das.rdb.test.ReadDBSchemaTests; +import org.apache.tuscany.das.rdb.test.framework.DB2Setup; + +public final class AllTestsDB2 { + + private 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java new file mode 100644 index 0000000000..0649fa815c --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.tuscany.das.rdb.test.framework.DerbySetup; + +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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java new file mode 100644 index 0000000000..e68aaad8aa --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.tuscany.das.rdb.test.framework.MySQLSetup; + +public final class AllTestsMySQL { + + private 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/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java new file mode 100644 index 0000000000..96d851b5dc --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.DAS; +import org.apache.tuscany.das.rdb.test.customer.CustomerFactory; +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.DataObject; + +/** + */ +public class SimplestStaticCrud extends DasTest { + + protected void setUp() throws Exception { + super.setUp(); + new CustomerData(getAutoConnection()).refresh(); + } + + public void testRead() throws Exception { + InputStream mapping = getClass().getClassLoader().getResourceAsStream("basicStaticCustomer.xml"); + DAS das = DAS.FACTORY.createDAS(mapping, getConnection()); + SDOUtil.registerStaticTypes(CustomerFactory.class); + + Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = ?"); + select.setParameter(1, "Williams"); + + DataObject root = select.executeQuery(); + + Collection customers = root.getList("Customer"); + assertEquals(4, customers.size()); + } + +} diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml new file mode 100644 index 0000000000..2d80da8b1a --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/1xM_mapping_no_cud.xml @@ -0,0 +1,37 @@ + + + + + + +
+ + + + +
+ + + + + +
+ diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml new file mode 100644 index 0000000000..7771d18c11 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfig.xml @@ -0,0 +1,30 @@ + + + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml new file mode 100644 index 0000000000..a8ff03297b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/BooksConfigWithAlias.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml new file mode 100644 index 0000000000..f0a11c554d --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/CompanyConfig.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml new file mode 100644 index 0000000000..7de98dffbd --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/CompanyEmployeeConfig.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + +
+ diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml new file mode 100644 index 0000000000..8ba6ab3e92 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithConverter.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml new file mode 100644 index 0000000000..638e70101f --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/CustomerConfigWithIDConverter.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml new file mode 100644 index 0000000000..4d3a0c87d9 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/CustomersOrdersConfig.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml new file mode 100644 index 0000000000..187609c0a0 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConfig1.xml @@ -0,0 +1,33 @@ + + + + + + + +
+ + + + + + +
\ No newline at end of file diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml new file mode 100644 index 0000000000..ef17c8d489 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/InvalidConverter.xml @@ -0,0 +1,38 @@ + + + + + + +
+ + + + +
+ + + + + +
+ diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml new file mode 100644 index 0000000000..78eb967689 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/ManagedBooksConfig.xml @@ -0,0 +1,30 @@ + + + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml new file mode 100644 index 0000000000..040b28b71b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/OneToOneRestrictedConfig.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + +
+ diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml new file mode 100644 index 0000000000..971788329e --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/OrdersOrderDetailsConfig.xml @@ -0,0 +1,36 @@ + + + + + + + +
+ + + +
+ + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml new file mode 100644 index 0000000000..a3477c9bf4 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/PartsConfig.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml new file mode 100644 index 0000000000..ae0d691902 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyDepartmentMapping.xml @@ -0,0 +1,39 @@ + + + + + + + +
+ + + + + + + +
+ + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml new file mode 100644 index 0000000000..7d81e363d7 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCompanyMapping.xml @@ -0,0 +1,25 @@ + + + + + + +
+
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml new file mode 100644 index 0000000000..191f238515 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMapping.xml @@ -0,0 +1,29 @@ + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml new file mode 100644 index 0000000000..ae29ff8d93 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD.xml @@ -0,0 +1,28 @@ + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml new file mode 100644 index 0000000000..36d2ece17b --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithCUD2.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml new file mode 100644 index 0000000000..e610549909 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerMappingWithInvalidCUD.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml new file mode 100644 index 0000000000..68d842e630 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicCustomerOrderMapping.xml @@ -0,0 +1,35 @@ + + + + + + +
+ + + +
+ + + + + +
+ diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml new file mode 100644 index 0000000000..2706687161 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/basicStaticCustomer.xml @@ -0,0 +1,30 @@ + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/cityStates.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/cityStates.xml new file mode 100644 index 0000000000..801828f960 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/cityStates.xml @@ -0,0 +1,40 @@ + + + + + + + +
+ + + + + + + +
+ + + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/company.xsd b/das-java/branches/das-java-M2/rdb/src/test/resources/company.xsd new file mode 100644 index 0000000000..a7118ec808 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/company.xsd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/companyMapping.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/companyMapping.xml new file mode 100644 index 0000000000..795c36a783 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/companyMapping.xml @@ -0,0 +1,42 @@ + + + + + + +
+ + + +
+ + + +
+ + + + + + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml new file mode 100644 index 0000000000..93bbea5130 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/companyMappingWithConverters.xml @@ -0,0 +1,46 @@ + + + + + + +
+ + + + +
+ + + + +
+ + + + + + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/customer.xsd b/das-java/branches/das-java-M2/rdb/src/test/resources/customer.xsd new file mode 100644 index 0000000000..e5482ae3a0 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/customer.xsd @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/customerMapping.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/customerMapping.xml new file mode 100644 index 0000000000..56f7c9d5b1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/customerMapping.xml @@ -0,0 +1,28 @@ + + + + + + + + +
+ +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml new file mode 100644 index 0000000000..fb816c5628 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/customerOrderRelationshipMapping.xml @@ -0,0 +1,34 @@ + + + + + + +
+ + +
+ + + + + +
+ diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml new file mode 100644 index 0000000000..b343d52b02 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/passiveConnection.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml new file mode 100644 index 0000000000..169e9e2f8e --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomer.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml new file mode 100644 index 0000000000..81c9628da1 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/staticCustomerOrder.xml @@ -0,0 +1,38 @@ + + + + + + + + +
+ + + +
+ + + + + +
diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml new file mode 100644 index 0000000000..6b76ae3309 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/staticInvalid.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/das-java/branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml b/das-java/branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml new file mode 100644 index 0000000000..04744dfbb9 --- /dev/null +++ b/das-java/branches/das-java-M2/rdb/src/test/resources/storedProcTest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/samples/build.xml b/das-java/branches/das-java-M2/samples/build.xml new file mode 100644 index 0000000000..f78ca9a3c8 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/build.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/samples/companyweb/build.xml b/das-java/branches/das-java-M2/samples/companyweb/build.xml new file mode 100644 index 0000000000..dd269b628e --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/build.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/db.lck b/das-java/branches/das-java-M2/samples/companyweb/dastest/db.lck new file mode 100644 index 0000000000..9f6b4b3d4b Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/db.lck differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl b/das-java/branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl new file mode 100644 index 0000000000..edbd775299 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/log/log.ctrl differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/log/log1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/log/log1.dat new file mode 100644 index 0000000000..7e85ac8e8f Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/log/log1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl b/das-java/branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl new file mode 100644 index 0000000000..edbd775299 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/log/logmirror.ctrl differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat new file mode 100644 index 0000000000..5d8ecaa10f Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c10.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat new file mode 100644 index 0000000000..0f79fa7574 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c101.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat new file mode 100644 index 0000000000..39d49e3d19 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c111.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat new file mode 100644 index 0000000000..2a4311779b Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c121.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat new file mode 100644 index 0000000000..64e3c18d62 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c130.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat new file mode 100644 index 0000000000..0632d04164 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c141.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat new file mode 100644 index 0000000000..d7541026f6 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c150.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat new file mode 100644 index 0000000000..6673bf1873 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c161.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat new file mode 100644 index 0000000000..c2a753cc5d Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c171.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat new file mode 100644 index 0000000000..cb9391aed1 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c180.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat new file mode 100644 index 0000000000..d3cf1d6364 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c191.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat new file mode 100644 index 0000000000..a7a2d536e9 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1a1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat new file mode 100644 index 0000000000..19097e69e7 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1b1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat new file mode 100644 index 0000000000..359525a31a Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1c0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat new file mode 100644 index 0000000000..9f257df932 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1d1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat new file mode 100644 index 0000000000..e43e52fb7f Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1e0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat new file mode 100644 index 0000000000..7e6ee3b1e0 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c1f1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat new file mode 100644 index 0000000000..1be6390f06 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c20.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat new file mode 100644 index 0000000000..b15d56855c Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c200.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat new file mode 100644 index 0000000000..84b0022312 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c211.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat new file mode 100644 index 0000000000..63106a9523 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c221.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat new file mode 100644 index 0000000000..9975f27c1f Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c230.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat new file mode 100644 index 0000000000..835c645a16 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c241.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat new file mode 100644 index 0000000000..d3d6adf4fb Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c251.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat new file mode 100644 index 0000000000..8d7333df7d Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c260.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat new file mode 100644 index 0000000000..af722f7d73 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c271.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat new file mode 100644 index 0000000000..3972983c2e Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c281.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat new file mode 100644 index 0000000000..31577b8124 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c290.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat new file mode 100644 index 0000000000..0f700d13a7 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2a1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat new file mode 100644 index 0000000000..1d6382fb3d Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2b1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat new file mode 100644 index 0000000000..3bc60d886b Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2c1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat new file mode 100644 index 0000000000..c542d3c91c Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2d0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat new file mode 100644 index 0000000000..16abd20b5f Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2e1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat new file mode 100644 index 0000000000..eb26be5932 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c2f0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat new file mode 100644 index 0000000000..1214f1df4b Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c300.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat new file mode 100644 index 0000000000..18c16f1123 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c31.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat new file mode 100644 index 0000000000..926cbf25b5 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c311.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat new file mode 100644 index 0000000000..07e7bc023c Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c320.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat new file mode 100644 index 0000000000..fd827f9dc2 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c331.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat new file mode 100644 index 0000000000..ca70319886 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c340.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat new file mode 100644 index 0000000000..8fbe2a527c Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c351.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat new file mode 100644 index 0000000000..dcf9c746e1 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c360.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat new file mode 100644 index 0000000000..6f21a840ea Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c371.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat new file mode 100644 index 0000000000..b512e8065f Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c380.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat new file mode 100644 index 0000000000..27006e95a1 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c391.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat new file mode 100644 index 0000000000..565dca97ac Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3a0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat new file mode 100644 index 0000000000..36894c9818 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3b1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat new file mode 100644 index 0000000000..d0c538aede Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3c0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat new file mode 100644 index 0000000000..65bcec5527 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3d1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat new file mode 100644 index 0000000000..bdab359420 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3e0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat new file mode 100644 index 0000000000..dc2d278b57 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c3f1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat new file mode 100644 index 0000000000..3072709cec Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c400.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat new file mode 100644 index 0000000000..61086690f2 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c41.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat new file mode 100644 index 0000000000..ca551d8249 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c411.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat new file mode 100644 index 0000000000..f04de0840e Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c420.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat new file mode 100644 index 0000000000..398b1672cc Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c431.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat new file mode 100644 index 0000000000..af259d0872 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c440.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat new file mode 100644 index 0000000000..772a18c658 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c451.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat new file mode 100644 index 0000000000..505428362d Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c460.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat new file mode 100644 index 0000000000..484d0df42d Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c471.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat new file mode 100644 index 0000000000..faac073076 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c481.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat new file mode 100644 index 0000000000..7585319d21 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c490.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat new file mode 100644 index 0000000000..4fe8b786e3 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c4a1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat new file mode 100644 index 0000000000..7fc7937b15 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c51.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat new file mode 100644 index 0000000000..d1fb08c946 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c60.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat new file mode 100644 index 0000000000..d4c2090a3b Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c71.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat new file mode 100644 index 0000000000..38b6ea6520 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c81.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat new file mode 100644 index 0000000000..a607a5969c Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/c90.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat new file mode 100644 index 0000000000..19b4c9e340 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ca1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat new file mode 100644 index 0000000000..73dc986572 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cb1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat new file mode 100644 index 0000000000..d1eef3bb56 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cc0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat new file mode 100644 index 0000000000..c7e6db3ef7 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cd1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat new file mode 100644 index 0000000000..8fd3bf17a8 Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/ce1.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat new file mode 100644 index 0000000000..332b3d9a8a Binary files /dev/null and b/das-java/branches/das-java-M2/samples/companyweb/dastest/seg0/cf0.dat differ diff --git a/das-java/branches/das-java-M2/samples/companyweb/dastest/service.properties b/das-java/branches/das-java-M2/samples/companyweb/dastest/service.properties new file mode 100644 index 0000000000..8cfe3b09a5 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/dastest/service.properties @@ -0,0 +1,22 @@ +#C:\apacheSVN\java\target\dastest +# ******************************************************************** +# *** Please do NOT edit this file. *** +# *** CHANGING THE CONTENT OF THIS FILE MAY CAUSE DATA CORRUPTION. *** +# ******************************************************************** +#Fri Feb 17 08:55:29 MST 2006 +SysschemasIndex2Identifier=225 +SyscolumnsIdentifier=144 +SysconglomeratesIndex1Identifier=49 +SysconglomeratesIdentifier=32 +SyscolumnsIndex2Identifier=177 +SysschemasIndex1Identifier=209 +SysconglomeratesIndex3Identifier=81 +SystablesIndex2Identifier=129 +SyscolumnsIndex1Identifier=161 +derby.serviceProtocol=org.apache.derby.database.Database +SysschemasIdentifier=192 +derby.storage.propertiesId=16 +SysconglomeratesIndex2Identifier=65 +derby.serviceLocale=en_US +SystablesIdentifier=96 +SystablesIndex1Identifier=113 diff --git a/das-java/branches/das-java-M2/samples/companyweb/pom.xml b/das-java/branches/das-java-M2/samples/companyweb/pom.xml new file mode 100644 index 0000000000..cfa8171171 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/pom.xml @@ -0,0 +1,57 @@ + + + + + + org.apache.tuscany.das.samples + tuscany-samples-das + 1.0-incubator-M2-SNAPSHOT + + + 4.0.0 + sample-companyweb + war + Tuscany DAS Company Sample + Sample use of RDB DAS in a Web application + + + + + org.apache.tuscany.das + tuscany-das-rdb + ${pom.version} + compile + + + + + + + src/main/java + + + src/main/java + + + src/main/resources + + + + diff --git a/das-java/branches/das-java-M2/samples/companyweb/readme.htm b/das-java/branches/das-java-M2/samples/companyweb/readme.htm new file mode 100644 index 0000000000..4af782ff8d --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/readme.htm @@ -0,0 +1,654 @@ + + + + + + + + +Tuscany RDB DAS Sample + + + + + + + + + + +

+ +

Tuscany RDB DAS Sample (companyweb)

+ +

 

+ +

This stand-alone sample demonstrates the SDO RDB Data Access +Service in the context of a simple web application.

+ +

 

+ +

The application starts with a canned database of Companies +and their related Departments.  Through +the web page interface, a user can:

+ +

 

+ +
    +
  1. Display + all Companies in the database
  2. +
  3. Display + all Companies and related Departments
  4. +
  5. Add a + new Department to a Company
  6. +
  7. Delete + all Departments from a Company
  8. +
  9. Change + the names of Departments in a Company
  10. +
+ +

 

+ +

So, this simple application covers all CRUD operations as +well as the some relationship manipulation (adding a Department associates that +Department with the Company).  The sample +runs on Tomcat 5.5 and employs a Derby +database accessed via a DataSource.

+ +

Running the sample

+ +

There are two options for running this sample:

+ +

 

+ +
    +
  1. Run + from Tomcat configured by the build
  2. +
  3. Deploying + the CompanyWeb WAR into a Tomcat you configure + yourself
  4. +
+ +

Running from Tomcat configured by the build

+ +

This sample application is deployed (along with the canned +test database) to an instance of Tomcat as part of our automated sample +testing.  This means you can run the +java/das/samples/testing/tomcat build (see +java/das/samples/testing/tomcat/readme.htm )  and then access the application by pointing +your browser to http://localhost:8080/sample-companyweb/. 

+ +

Deploying the CompanyWeb WAR into a Tomcat you +configure yourself

+ +

Alternatively, you can deploy the sample to your own +configured Tomcat installation by following the instructions below.  These instructions assume that you have either +1) downloaded the Tuscany sample distribution or 2) Downloaded the Tuscany +source and run our maven build, see the following link to more details steps on +how to build DAS Sample applications http://incubator.apache.org/tuscany/java_das_overview.html +.

+ +

Set Up

+ +
    +
  1. Download + and install the most recent stable version of Tomcat 5.5.  You can find it here: http://tomcat.apache.org/download-55.cgi
  2. +
  3. Download + the most recent official release of Derby + from here: http://db.apache.org/derby/index.html.  The only file you’ll need from this + download is derby.jar
  4. +
  5. Stop + Tomcat
  6. +
  7. Copy derby.jar (from the derby distribution) to {Tomcat_Home}/common/lib:
  8. +
  9. Add + the sample war file to {Tomcat_Home}/webapps
  10. +
      +
    1. sample-companyweb-xxx.war (e.g. + “sample-companyweb-1.0-incubator-M2.war”)
    2. +
    +
  11. Install + the canned Derby database to + Tomcat:
  12. +
      +
    1. First, + create a new directory named “Databases” to hold the sample database.  Create {Tomcat_Home}/Databases
    2. +
    3. Copy + the dastest folder (and all its contents) from + {build directory root OR where samples where unzipped}/java/das/samples/companyweb to {Tomcat_Home}/Databases.  
      +
      + NOTE: If you are running this + from a sample distribution, the canned database is available in the + distribution, inside the databases directory.
    4. +
    +
+ +

 

+ +
    +
  1. Define + a DataSource by adding a datasource definition + to {Tomcat_Home}/conf/server.xml.
  2. +
      +
    1. Find + the end-of-section marker </GlobalNamingResources> + and add the following lines just above it:
    2. +
    +
+ +

 

+ +
        <!-- Global Datasource for Derby dastest database -->
         <Resource name="jdbc/dastest"
              type="javax.sql.DataSource"  auth="Container"
              description="Derby database for DAS Company sample"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="" password="" 
              driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
              url="jdbc:derby:{absolute path}Databases/dastest"/>
+ +

 

+ +

 Requirement: +You must include the absolute path to the “Databases” directory in the above url attribute.  Fore example:

+ +

 

+ +
         url="jdbc:derby:c:\apache-tomcat-5.5.17\Databases/dastest"/>
+ +

 

+ +
    +
  1. Start + tomcat and point your browser to: http://localhost:8080/sample-companyweb-{version + tag}/
  2. +
+ +

 

+ +

example: http://localhost:8080/sample-companyweb-1.0-incubator-M2/

+ +

 

+ +

Sample Architecture

+ +

This is a simple, single-page, web application.  The main components of this application are:

+ +
    +
  • The + RDB Data Access Service (DAS)
  • +
  • SDO
  • +
  • CompanyClient.java
  • +
  • Company.jsp
  • +
  • The + canned Derby database
  • +
+ +

 

+ +

 

+ +

The CompanyClient +uses the DAS directly and provides +high-level services to the jsp such as:

+ +

public +final List getCompanies()

+ +

This is a good place to look for how you might use the DAS +in your own application.

+ +

 

+ +

The Company.jsp +responds to client interaction by invoking services of the CompanyClient.  It receives data from the CompanyClient +as SDO data graphs and manipulates SDOs directly to display data.

+ +

 

+ +

The canned Derby +database comes preloaded with Companies and related Departments.  The Derby +database instance is a simple file folder.

+ +

 

+ +

The DAS accepts +directives (commands) from the CompanyClient and +reads and writes to the derby database instance appropriately.

+ +
+ + + + + diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java b/das-java/branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java new file mode 100644 index 0000000000..d0519ecc08 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/java/org/apache/tuscany/samples/das/companyweb/CompanyClient.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.samples.das.companyweb; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.DAS; + +import commonj.sdo.DataObject; + +public class CompanyClient { + + private Random generator = new Random(); + + private DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml")); + + public final List getCompanies() { + + Command read = das.getCommand("all companies"); + DataObject root = read.executeQuery(); + return root.getList("COMPANY"); + + } + + public final List getCompaniesWithDepartments() { + + Command read = das.getCommand("all companies and departments"); + DataObject root = read.executeQuery(); + return root.getList("COMPANY"); + } + + public final List getDepartmentsForCompany(int id) { + Command read = das.getCommand("all departments for company"); + read.setParameter(1, new Integer(id)); + DataObject root = read.executeQuery(); + return root.getList("COMPANY"); + } + + public final void addDepartmentToFirstCompany() { + Command read = das.getCommand("all companies and departments"); + DataObject root = read.executeQuery(); + DataObject firstCustomer = root.getDataObject("COMPANY[1]"); + + DataObject newDepartment = root.createDataObject("DEPARTMENT"); + newDepartment.setString("NAME", "Default Name"); + firstCustomer.getList("departments").add(newDepartment); + + das.applyChanges(root); + + } + + public final void deleteDepartmentsFromFirstCompany() { + + // This section gets the ID of the first Company just so I can + // demonstrate a parameterized command next + Command readAll = das.getCommand("all companies and departments"); + DataObject root = readAll.executeQuery(); + int idOfFirstCustomer = root.getInt("COMPANY[1]/ID"); + System.out.println("ID of first company is: " + idOfFirstCustomer); + + // Read a specific company based on the known ID + Command readCust = das.getCommand("company by id with departments"); + readCust.setParameter(1, new Integer(idOfFirstCustomer)); + root = readCust.executeQuery(); + + // Delete all the comany's departments from the graph + DataObject firstCustomer = root.getDataObject("COMPANY[1]"); + + // Shallow copy of list for deleting. This is required to avoid the + // dreaded + // ConcurrentModificationException since #delete operation also removes + // from the original list + List allDepartments = new ArrayList(firstCustomer.getList("departments")); + + Iterator i = allDepartments.iterator(); + DataObject department; + while (i.hasNext()) { + department = (DataObject) i.next(); + System.out.println("Deleting department named: " + department.getString("NAME")); + department.delete(); + } + + das.applyChanges(root); + + } + + public final void changeFirstCompanysDepartmentNames() { + + // This section gets the ID of the first Company just so I can + // demonstrate a parameterized command next + Command readAll = das.getCommand("all companies and departments"); + DataObject root = readAll.executeQuery(); + int idOfFirstCustomer = root.getInt("COMPANY[1]/ID"); + System.out.println("ID of first company is: " + idOfFirstCustomer); + + // Read a specific company based on the known ID + Command readCust = das.getCommand("company by id with departments"); + readCust.setParameter(1, new Integer(idOfFirstCustomer)); + root = readCust.executeQuery(); + + // Modify all the comany's department names + DataObject firstCustomer = root.getDataObject("COMPANY[1]"); + Iterator i = firstCustomer.getList("departments").iterator(); + DataObject department; + while (i.hasNext()) { + department = (DataObject) i.next(); + System.out.println("Modifying department: " + department.getString("NAME")); + department.setString("NAME", getRandomDepartmentName()); + } + das.applyChanges(root); + + } + + + public void releaseResources() { + das.releaseResources(); + } + + // Utilities + + private String getRandomDepartmentName() { + int number = generator.nextInt(1000) + 1; + return "Dept-" + number; + } + + private InputStream getConfig(String fileName) { + return getClass().getClassLoader().getResourceAsStream(fileName); + } + +} diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml new file mode 100644 index 0000000000..1992ab02cd --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/CompanyConfig.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + 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. diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE new file mode 100644 index 0000000000..f1aa4f1921 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/NOTICE @@ -0,0 +1,32 @@ +Apache Tuscany DAS for Java +Copyright 2006 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +Apache Tuscany is an effort undergoing incubation at The Apache Software Foundation (ASF), +sponsored by the Apache 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. + +Unless otherwise indicated, all distribution made available by the Apache Software Foundation +is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL"). +A copy of the AL is provided with this distribution as the LICENSE.txt file present in the +root directory, and is also available at http://www.apache.org/licenses/. + +The terms and conditions governing the distribution may refer to the AL or other license +agreements, notices or terms and conditions. Some of these other license agreements may +include (but are not limited to): + + . Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html) + . Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html) + +This product also includes software developed by: +- the Eclipse Modeling Framework project (http://www.eclipse.org/emf/) + +It is your obligation to read and accept all such terms and conditions prior to use of the +distribution. If term or condition is provided, please contact the Apache Software Foundation +to determine what terms and conditions govern that particular distribution. diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt new file mode 100644 index 0000000000..107de8c3ca --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/META-INF/README.txt @@ -0,0 +1,35 @@ +Apache Tuscany M2 build (October, 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/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties new file mode 100644 index 0000000000..5c49df303c --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/resources/log4j.properties @@ -0,0 +1,29 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# +# Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=INFO, A1 + +# A1 is set to be a ConsoleAppender. +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[DAS RDB] - %c{1}.%M (%L) : %m %n + +# Print only messages of level WARN or above in the package com.foo. +log4j.logger.org.apache.tuscany=NONE \ No newline at end of file diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp b/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp new file mode 100644 index 0000000000..58db88c623 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/Company.jsp @@ -0,0 +1,158 @@ + + + + +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + + pageEncoding="ISO-8859-1" + + import="org.apache.tuscany.samples.das.companyweb.CompanyClient" + import="commonj.sdo.*" +%> + + +Company Test + + + +

Tuscany DAS Companies WEB Example

+ + +
+ + + + + +
+ + +<%if(request.getParameter("doFill") != null){%> + + + + + + + + + + + <% + CompanyClient companyClient = new CompanyClient(); + java.util.Iterator i = companyClient.getCompaniesWithDepartments().iterator(); + while (i.hasNext()) { + DataObject company = (DataObject)i.next(); + %> + + + + + <% + } + companyClient.releaseResources(); + %> + + +
IDName
<%=company.getInt("ID")%><%=company.getString("NAME")%>
+<%}%> + + + +<% +if(request.getParameter("doAddDepartment") != null){ + CompanyClient companyClient = new CompanyClient(); + companyClient.addDepartmentToFirstCompany(); + companyClient.releaseResources(); +} +%> + + +<% +if(request.getParameter("doDeleteDepartments") != null){ + CompanyClient companyClient = new CompanyClient(); + companyClient.deleteDepartmentsFromFirstCompany(); + companyClient.releaseResources(); +} +%> + + +<% +if(request.getParameter("doChangeDepartmentNames") != null){ + CompanyClient companyClient = new CompanyClient(); + companyClient.changeFirstCompanysDepartmentNames(); + companyClient.releaseResources(); +} +%> + + + +<%if(request.getParameter("doFill") == null) {%> + + + + + + + + + + + + + <% + CompanyClient companyClient = new CompanyClient(); + java.util.Iterator i = companyClient.getCompaniesWithDepartments().iterator(); + while (i.hasNext()) { + DataObject company = (DataObject)i.next(); + %> + + + + + + + + <% + java.util.Iterator j = company.getList("departments").iterator(); + while (j.hasNext()) { + DataObject department = (DataObject)j.next(); + %> + + + + + <% + } + %> + <% + } + companyClient.releaseResources(); + %> + + +
IDNameDepartment_IDDepartment_Name
<%=company.getInt("ID")%><%=company.getString("NAME")%>
<%=department.getInt("ID")%><%=department.getString("NAME")%>
+<%}%> + + + +
+ + diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml b/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000000..5f0af32dd5 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/META-INF/context.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml b/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..dc7e488fef --- /dev/null +++ b/das-java/branches/das-java-M2/samples/companyweb/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,30 @@ + + + + + + Tuscany DAS sample Company WEB + + + Company.jsp + + + diff --git a/das-java/branches/das-java-M2/samples/pom.xml b/das-java/branches/das-java-M2/samples/pom.xml new file mode 100644 index 0000000000..ff1edb39d6 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/pom.xml @@ -0,0 +1,36 @@ + + + + 4.0.0 + + org.apache.tuscany.das + tuscany-das + 1.0-incubator-M2-SNAPSHOT + + + org.apache.tuscany.das.samples + tuscany-samples-das + pom + Tuscany DAS Samples + + + companyweb + + diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/build.xml b/das-java/branches/das-java-M2/samples/testing/tomcat/build.xml new file mode 100644 index 0000000000..af159f940a --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/build.xml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml new file mode 100644 index 0000000000..0aa3cf857a --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/pom.xml @@ -0,0 +1,80 @@ + + + + + org.apache.tuscany.das.samples + tuscany-samples-das-testing-tomcat + 1.0-incubator-M2-SNAPSHOT + + + 4.0.0 + tuscany-samples-das-testing-tomcatcompanyweb + jar + Tuscany Testing DAS Sample - Companyweb + Testing Tomcat DAS end user test + + + + + junit + junit + 3.8.1 + test + + + htmlunit + htmlunit + 1.9 + test + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + jakarta-regexp + jakarta-regexp + 1.4 + + + ant + ant-jakarta-regexp + 1.6.1 + + + ant + ant-xslp + 1.6.5 + + + ant + ant-trax + 1.6.5 + + + + + + diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/LICENSE.txt b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/LICENSE.txt new file mode 100644 index 0000000000..25d78feeac --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/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/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/NOTICE b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/NOTICE new file mode 100644 index 0000000000..d48810c0ec --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/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/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/README.txt b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/main/resources/META-INF/README.txt new file mode 100644 index 0000000000..9b26d1690a --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/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/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java new file mode 100644 index 0000000000..d2f3e22b83 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/companyweb/src/test/java/org/apache/tuscany/test/das/DasTestCase.java @@ -0,0 +1,249 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.test.das; + +import java.net.URL; + +import junit.framework.TestCase; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; + +public class DasTestCase extends TestCase { + public static final String testUrl = "http://localhost:8080/sample-companyweb/"; + + protected WebClient _webClient; + protected URL _url; + + protected void setUp() throws Exception { + //New HTMLunit web client + _webClient = new WebClient(); + _webClient.setRedirectEnabled(true); + + // Going to have the WebClient connect to this URL + _url = new URL(testUrl); + + } + + public void testHomepage() throws Exception { + final String TEST_CASE = "HomePage"; + System.out.print("Running:" + TEST_CASE + "\t\t\t"); + + final HtmlPage page = (HtmlPage) _webClient.getPage(_url); + //System.out.println(page.getTitleText()); + + String responseText = page.asText(); + //System.out.println("html-->\n" + responseText); + //check page header + assertTrue(-1 != responseText.indexOf("Tuscany DAS Companies WEB Example")); + //check table headers + assertTrue(-1 != responseText.indexOf("ID")); + assertTrue(-1 != responseText.indexOf("Name")); + assertTrue(-1 != responseText.indexOf("Department_ID")); + assertTrue(-1 != responseText.indexOf("Department_Name")); + //check companies values + assertTrue(-1 != responseText.indexOf("51")); + assertTrue(-1 != responseText.indexOf("ACME Publishing")); + assertTrue(-1 != responseText.indexOf("53")); + assertTrue(-1 != responseText.indexOf("Do-rite plumbing")); + assertTrue(-1 != responseText.indexOf("53")); + assertTrue(-1 != responseText.indexOf("MegaCorp")); + //check departments + assertTrue(-1 != responseText.indexOf("73")); + assertTrue(-1 != responseText.indexOf("74")); + assertTrue(-1 != responseText.indexOf("75")); + assertTrue(-1 != responseText.indexOf("76")); + assertTrue(-1 != responseText.indexOf("77")); + assertTrue(-1 != responseText.indexOf("78")); + assertTrue(-1 != responseText.indexOf("12")); + + System.out.println("SUCCESS!!!"); + } + + + public void testAllCompanies() throws Exception{ + final String TEST_CASE = "AllCompanies"; + System.out.print("Running:" + TEST_CASE + "\t\t\t"); + + // Get the first page + final HtmlPage page = (HtmlPage) _webClient.getPage(_url); + + // Get the form that we are dealing with and within that form, + // find the submit button and the field that we want to change. + final HtmlForm form = (HtmlForm) page.getForms().get(0); + final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doFill"); + // Now submit the form by clicking the button + final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); + + //verify the resultPage + String responseText = resultPage.asText(); + //System.out.println("html-->\n" + responseText); + // check table headers + assertTrue(-1 != responseText.indexOf("ID")); + assertTrue(-1 != responseText.indexOf("Name")); + //check table values + assertTrue(-1 != responseText.indexOf("51")); + assertTrue(-1 != responseText.indexOf("ACME Publishing")); + assertTrue(-1 != responseText.indexOf("52")); + assertTrue(-1 != responseText.indexOf("Do-rite plumbing")); + assertTrue(-1 != responseText.indexOf("53")); + assertTrue(-1 != responseText.indexOf("MegaCorp")); + + System.out.println("SUCCESS!!!"); + } + + public void testAllCompaniesDepartments() throws Exception{ + final String TEST_CASE = "AllCompaniesDepartments"; + System.out.print("Running:" + TEST_CASE + "\t\t"); + + // Get the first page + final HtmlPage page = (HtmlPage) _webClient.getPage(_url); + + // Get the form that we are dealing with and within that form, + // find the submit button and the field that we want to change. + final HtmlForm form = (HtmlForm) page.getForms().get(0); + final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doFillAll"); + // Now submit the form by clicking the button + final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); + + //verify the resultPage + String responseText = resultPage.asText(); + //System.out.println("html-->\n" + responseText); + //check table headers + assertTrue(-1 != responseText.indexOf("ID")); + assertTrue(-1 != responseText.indexOf("Name")); + assertTrue(-1 != responseText.indexOf("Department_ID")); + assertTrue(-1 != responseText.indexOf("Department_Name")); + //check companies values + assertTrue(-1 != responseText.indexOf("51")); + assertTrue(-1 != responseText.indexOf("ACME Publishing")); + assertTrue(-1 != responseText.indexOf("53")); + assertTrue(-1 != responseText.indexOf("Do-rite plumbing")); + assertTrue(-1 != responseText.indexOf("53")); + assertTrue(-1 != responseText.indexOf("MegaCorp")); + //check departments + assertTrue(-1 != responseText.indexOf("73")); + assertTrue(-1 != responseText.indexOf("74")); + assertTrue(-1 != responseText.indexOf("75")); + assertTrue(-1 != responseText.indexOf("76")); + assertTrue(-1 != responseText.indexOf("77")); + assertTrue(-1 != responseText.indexOf("78")); + assertTrue(-1 != responseText.indexOf("12")); + + System.out.println("SUCCESS!!!"); + } + + public void testAddDepartmentToFirstCompany() throws Exception{ + final String TEST_CASE = "AddDepartmentToFirstCompany"; + System.out.print("Running:" + TEST_CASE + "\t"); + + // Get the first page + final HtmlPage page = (HtmlPage) _webClient.getPage(_url); + + // Get the form that we are dealing with and within that form, + // find the submit button and the field that we want to change. + final HtmlForm form = (HtmlForm) page.getForms().get(0); + final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doAddDepartment"); + // Now submit the form by clicking the button + final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); + + //verify the resultPage + String responseText = resultPage.asText(); + //System.out.println("html-->\n" + responseText); + //check new department + assertTrue(-1 != responseText.indexOf("79")); + + System.out.println("SUCCESS!!!"); + } + + + public void testChangeCompanyDepartmentNames() throws Exception{ + final String TEST_CASE = "ChangeCompanyDepartmentNames"; + System.out.print("Running:" + TEST_CASE + "\t"); + + // Get the first page + final HtmlPage page = (HtmlPage) _webClient.getPage(_url); + + // Get the form that we are dealing with and within that form, + // find the submit button and the field that we want to change. + final HtmlForm form = (HtmlForm) page.getForms().get(0); + final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doChangeDepartmentNames"); + // Now submit the form by clicking the button + final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); + + //verify the resultPage + String responseText = resultPage.asText(); + //System.out.println("html-->\n" + responseText); + //check update departments + assertTrue(-1 != responseText.indexOf("Dept-")); + //also, check to not have old departments names (default name) + assertTrue(-1 == responseText.indexOf("Default Name")); + + System.out.println("SUCCESS!!!"); + } + + public void testDeleteCompanyOneDepartments() throws Exception{ + final String TEST_CASE = "DeleteCompanyOneDepartments"; + System.out.print("Running:" + TEST_CASE + "\t"); + + // Get the first page + final HtmlPage page = (HtmlPage) _webClient.getPage(_url); + + // Get the form that we are dealing with and within that form, + // find the submit button and the field that we want to change. + final HtmlForm form = (HtmlForm) page.getForms().get(0); + final HtmlSubmitInput allCompaniesButton = (HtmlSubmitInput)form.getHtmlElementById("doDeleteDepartments"); + // Now submit the form by clicking the button + final HtmlPage resultPage = (HtmlPage)allCompaniesButton.click(); + + //verify the resultPage + String responseText = resultPage.asText(); + //System.out.println("html-->\n" + responseText); + //check that al the company 1 departments are gone.. + assertTrue(-1 == responseText.indexOf("73")); + assertTrue(-1 == responseText.indexOf("74")); + assertTrue(-1 == responseText.indexOf("75")); + assertTrue(-1 == responseText.indexOf("76")); + assertTrue(-1 == responseText.indexOf("77")); + assertTrue(-1 == responseText.indexOf("78")); + + System.out.println("SUCCESS!!!"); + } + + /** + * @param args + */ + public static void main(String[] args) { + DasTestCase t = new DasTestCase(); + try{ + t.testHomepage(); + t.testAllCompanies(); + t.testAllCompaniesDepartments(); + t.testAddDepartmentToFirstCompany(); + t.testChangeCompanyDepartmentNames(); + t.testDeleteCompanyOneDepartments(); + }catch(Exception e){ + e.printStackTrace(); + } + + } + +} diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/context.xsl b/das-java/branches/das-java-M2/samples/testing/tomcat/context.xsl new file mode 100644 index 0000000000..35a78a43a5 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/context.xsl @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/datasource.xsl b/das-java/branches/das-java-M2/samples/testing/tomcat/datasource.xsl new file mode 100644 index 0000000000..ad473e317c --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/datasource.xsl @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + Global Datasource for Derby dastest database + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/pom.xml b/das-java/branches/das-java-M2/samples/testing/tomcat/pom.xml new file mode 100644 index 0000000000..8cc305e935 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/pom.xml @@ -0,0 +1,113 @@ + + + + + org.apache.tuscany.das.samples + tuscany-samples-das + 1.0-incubator-M2-SNAPSHOT + + + + 4.0.0 + tuscany-samples-das-testing-tomcat + pom + Tuscany Testing in Tomcat + + + + companyweb + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*TestCase.java + + + + + + + + src/test/java + + **/*.componentType + + + + src/test/resources + + **/* + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.1 + + + prepareTomcat + process-test-resources + + + + + + + + + + + + run + + + + + cleanupTomcat + clean + + + + + + + + + run + + + + + + + + + test + + diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/readme.htm b/das-java/branches/das-java-M2/samples/testing/tomcat/readme.htm new file mode 100644 index 0000000000..b47a9d24c5 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/readme.htm @@ -0,0 +1,71 @@ + + + + Tuscany End User Sample Testing + + +

Tuscany End User Sample Testing

+

Initial Setup

  +   Most of the following only needs to be done once +unless noted otherwise.
+
    +
  • Follow the steps to build Tuscany DAS Companyweb sample application from Tuscany DAS Java Overview.
  • + +
  • Change directory +to java/das/samples/testing/tomcat.
  • + +
  • Download +Tomcat Core 5.5.xx zip +for Windows or  tar.gz for Linux  from Apache +Tomcat.
  • + +
  • You can place the tomcat distribution in your java/samples/das/testing/tomcat directory or, alternatively, you can create/edit {user home}/build.properties to +change the property tuscany.acceptance.tomcat.zipped to tell the build +environment where the tomcat distribution zip file is located.
  • +
  • You may have to edit build.xml  to change the property tuscany.acceptance.tomcat.version +to match the xx +to the specific version that you downloaded.
  • +
+ +

 Running

In +the java/das/samples/testing/tomcat +directory run maven:
mvn

Explanation

Maven does +the following:
  • Unpacks the +Tomcat distribution into the target directory to ensure a pristine +environment.
  • It adds the appropriate Tuscany and it +dependencies jars into Tomcat (for more  details)
  • Does +the necessary changes +to Tomcat's configuration as required. (for more  details)
  • Deploys +Tuscany's DAS sample war files into Tomcat.
  • Starts +Tomcat (You should see another window running Tomcat) 
  • Begins +running HTML unit tests that should closely match running the samples +as a user would.
If all goes well at the end you +should see:
+
[INFO] ----------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ----------------------------------------------------------------------------
[INFO] Tuscany Testing in Tomcat .............................. SUCCESS [0.340s]
[INFO] Tuscany Testing Tomcat DAS Sample - Companyweb ......... SUCCESS [48.350s]
[INFO] ----------------------------------------------------------------------------
[INFO] ----------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------------
[INFO] Total time: 49 seconds
[INFO] Finished at: Tue Aug 08 15:30:28 EDT 2006
[INFO] Final Memory: 7M/15M
[INFO] ----------------------------------------------------------------------------

Cleanup

Close +the Tomcat window and issue mvn clean.

Note

+

Because the html unit tests execute multiple user actions that change the contents of the database tables, is recommended +that you always run these tests in a clean environment (after a mvn clean), +otherwise you may experience failure on some tests as the expected result data might have been affected by previous test runs.

+ + \ No newline at end of file diff --git a/das-java/branches/das-java-M2/samples/testing/tomcat/server.xsl b/das-java/branches/das-java-M2/samples/testing/tomcat/server.xsl new file mode 100644 index 0000000000..b53d1d50c7 --- /dev/null +++ b/das-java/branches/das-java-M2/samples/testing/tomcat/server.xsl @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + org.apache.tuscany.tomcat.TuscanyHost + + + + + + + + -- cgit v1.2.3